通过 odbc 文本格式变音 (öäü) 在任何地方使用 c# sql

奥利

我使用 c# 通过 odbc 访问 any-sql-database。当我从数据库中选择一些文本值时,变音符号 (ö,ä,ü) 无法正确显示。我在https://www.connectionstrings.com/ 上寻找一种通过连接字符串传递格式的方法,但我找不到任何东西。

从数据库接收字符串后,我是否必须使用 c# 转换字符串?我怎么能在 c# 中这样做?或者有什么方法可以告诉我的连接正确地自动格式化它?

这是一个代码片段

var connectionString = "Driver={SQL Anywhere 17};Host=localhost;Server=myserver;db=mydatabase;uid=dba;pwd=sql;trusted_connection=yes;";

using (var context = SqlContext.Create(connectionString, SqlProvider.AnySql))
{
    foreach (var dataRow in context.ExecuteReader("SELECT NAME FROM PERSON"))
    {
         var name = dataRow.Get<string>("NAME");

         Console.WriteLine(name); //Output is "G÷ppel" isntead of "Göpel"
    }
}

我正在使用的数据库来自客户。他有一个使用数据库的程序。当我使用 SQL Center 查找数据时,它也显示“G÷ppel”,但是当客户使用他的程序处理数据库时,它显示“Göppel”。


我尝试在我的连接字符串中使用 charste=utf8(和 cp437),但没有区别。我的连接字符串现在看起来像这样"Driver={SQL Anywhere 17};Host=localhost;Server=myserver;db=mydatabase;uid=dba;pwd=sql;trusted_connection=yes;charset=utf8"

SQL 中心说,列的数据类型是 varchar。

奥利

我能够通过查询获得正确的字符集。SELECT DB_PROPERTY('CharSet')它告诉我字符集是imb850. 我试图通过连接字符串传递字符集,但这没有帮助。所以我必须对我从数据库中收到的字符串进行编码。

这是我使用的 IDataRecord 的扩展方法:

public static T Get<T>(this IDataRecord dataRecord, int ordinal, T defaultValue)
{
    //Here i call my default generic extensionmethod
    T value = DatabaseAccessLibrary.Extensions.IDataRecordExtensions.Get<T>(dataRecord, ordinal, defaultValue);

    //Here is the extracode
    if (value != null)
    {
        if (typeof(T) == typeof(string))
        {
            //If the value is not null and typeof string, i encode the value with the characterset
            string correctedValue = Encoding.Default.GetString(Encoding.GetEncoding("ibm850").GetBytes(value.ToString()));

            return (T)Convert.ChangeType(correctedValue, typeof(T));
        }
    }            

    return value;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

确实可以在任何地方使用JOINS来替换SQL中的子查询

在任何地方解析文本的XML文档

通过 vtable 调度比哈希表快,但如果在任何地方使用都会消耗大量内存

如何通过在 app.module 中指定它来在任何地方使用自定义指令?

macOS Catalina中使用的Apple Music“ Library.musicdb”的格式/格式是否记录在任何地方?

如何允许 XML 元素通过 XSD 出现在任何地方?

如何通过在任何地方点击来关闭数字键盘

如何通过在任何地方单击外部来关闭div?

不能在任何地方输入文本字段

Googletest不会通过bazel测试(应该在任何地方失败),但可以与cmake和clion一起使用

org.w3c.dom.Node的源代码在任何地方都可用吗?

错误的struct多重定义,但我在任何地方都看不到错误(C ++)

kotlin.MetaData中保存的数据格式在任何地方都有记录吗?

通过ODBC连接到Spark SQL

无法通过ODBC连接到SQL Server

如何在类中定义SQL Server连接字符串并在项目中的任何地方使用?

使用JavaFX在任何地方处理鼠标事件

使用未在任何地方注入的 angular 服务

如何在任何地方使用 AsyncStorage 数据?

如何使用sql将文本格式的日期传递为DATE格式

使用C#将列格式化为CSV文件中的文本格式

Vb.net项目保存无法通过其原始来源从任何地方打开

如何使用 ODBC Driver 13 for SQL Server 处理文本列

无法在 SQL 2019 Linux 上使用 PolyBase 通过 ODBC 查询 AS400

无法通过Windows 2012上的系统dsn使用ODBC连接连接到SQL Server 2008

通过https从C#以纯文本格式发送用户名和密码到Wordpress网站是否安全?

从文本格式获取最新的SQL日期

通过JDBC访问访问(使用ODBC?)

通过Go / Golang使用ODBC存储过程