2009-09-25 71 views
1

在查询DBF文件时,是否可以指定OLEDB应使用哪种字符编码?如何在查询DBF时指定OLEDB使用的字符编码?

可能的解决方法是在OLEDB调用DBF文件的字符编码之前对查询字符串进行编码,然后在返回时对所有结果进行编码。这将工作,但它会很好,如果OLEDB或ADO.NET可以为我做到这一点。

UPDATE

suggestion维克托·Jevdokimov似乎并不自动工作。但它让我调查了字符串的手动转换。可以使用CultureInfo的TextInfo属性找出OemCodePage和WindowsCodePage,并使用它们获取相应的Encoding实例以执行手动转换。但是我无法让ADO.NET使用这些encondings来为我执行转换。

+0

大概是因为ADO.NET是传输和编码转换属于其他地方,在那里发生转换,就像阅读器读取或写入作家或任何其他I/O。 – 2009-09-25 14:20:05

+0

那么您的答案如何为我提供解决方案?我不明白:) – 2009-09-25 14:26:22

+0

线程在你的应用程序级别。您在调用ADO.NET之前更改线程文化 - 这会将您的字符串转换为适用于ADO.NET的编码。您还原其他输入/输出的原始线程编码。你尝试过我的方法吗? – 2009-09-28 07:12:41

回答

2

之前执行DBF SQL更改CurrentThread的的CurrentCulture,此后恢复:

Dim appCulture As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture 
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US") 
//execute command here 
System.Threading.Thread.CurrentThread.CurrentCulture = appCulture 
+0

线程文化如何影响字符编码? CultureInfo有一个TextInfo属性,但它只处理代码页。 – 2009-09-25 07:24:57

+0

假设您的当前运行时文化是Unicode或UTF-8或其他。 .NET会将所有变为Unicode的内容转换为内部存储在内存中,并在输出时使用当前文化进行转换。所以改变当前的线程文化对.NET说如何做输入/输出转换。 – 2009-09-25 08:09:47