【问题标题】:Microsoft.Jet.OLEDB.4.0 Converting CharactersMicrosoft.Jet.OLEDB.4.0 转换字符
【发布时间】:2011-08-13 05:42:55
【问题描述】:

我正在使用包含以下字符的 CSV:

” and •

我正在通过 OleDb 读取 CSV,提供程序是 Microsoft.Jet.OLEDB.4.0。当数据加载到 OleDbCommand 中时,字符分别转换为:

“ and •

我怀疑连接字符串中可能存在排序规则设置,但我找不到任何相关信息。

我可以确认以下几点:

  1. 当我打开 CSV 时,我可以看到原始字符。
  2. 如果我通过 OleDb WHERE [field] LIKE '%•%' 对文件运行选择,我会得到 0 行,但如果 SELECT WHERE [field] LIKE '%-%' 我会返回行。

有什么想法吗?

【问题讨论】:

  • 你的问题到底是什么?
  • 如何使用 OleDbConnection 加载数据并在运行选择时阻止它转换字符?

标签: c# sql oledb collation


【解决方案1】:

您可以创建schema.ini 文件并使用格式和CharacterSet 属性进行播放。

看看这个样本:How to read data from Unicode formatted text file and import to Data Table using .Net

这是另一个示例,它将向您展示如何使用 schema.ini 读取 csv 文件:Importing CSV file into Database with Schema.ini

【讨论】:

    【解决方案2】:

    终于!感谢@HABJAN,我能够获得与在连接字符串的扩展属性中设置 CharaterSet 一样简单的解决方案。在我的情况下,它是 UTF-8 ......默认情况下在 PHPMyAdmin 中常用,这是我的数据被检索的地方。

    产生的工作连接字符串:

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"{0}\";Extended Properties=\"text;HDR=Yes;FMT=Delimited;CharacterSet=65001;\""
    

    关键是 CharacterSet=65001 (Code Page Identifier for UTF-8),这对于一些精通整理的人来说可能很明显,但多年来我设法避免了这些问题,并且在这方面从未遇到过。

    当我还遵循 @http://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx 找到的文档并将 CharacterSet 设置为与上述相同时,我也能够让 HABJAN 的解决方案发挥作用。

    对于我的情况,这是更好的方法,因为它是一个更简单/更易于维护的解决方案,但是 +1 对 HABJAN 帮助我到达那里!

    谢谢

    【讨论】:

    • 根据 MSDN,我看到只有 2 个选项可以将 CharacterSet 设置为 ANSII 或 OEM。但是,我看到您明确提到了 UTF8 的代码。这是否有效,并且任何其他代码(如 1252)也有效? docs.microsoft.com/en-us/sql/odbc/microsoft/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多