我正试图用c#在悖论表中添加值。
重点是该表包含本地化字符串,BDE需要使用Langdriver ANSII850。
我尝试在.Net中同时使用OLEDB和Odbc驱动程序,但无法在数据库中写入正确的值。我总是遇到编码问题。
示例:
// ODBC Connection string (using string.Format for setting the path)
string connectionBase = @"Driver={{Microsoft Paradox Driver (*.db )}};DriverID=538;Fil=Paradox 5.X;DefaultDir={0};CollatingSequence=ASCII;";
// I tried to put the langdriver in the CollatingSequence parameter
string connectionBase = @"Driver={{Microsoft Paradox Driver (*.db )}};DriverID=538;Fil=Paradox 5.X;DefaultDir={0};CollatingSequence=ANSII850;";
// I tried the OleDb driver
string connectionBase = @"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Paradox 5.x;"Data Source={0};";
然后,我尝试插入值"çãáçõ"以进行测试。根据我使用的驱动程序,我会得到不同的结果,但最终的字符串从未正确编码。
编辑:
最后,我找到了一个解决方案,但并不理想:
- 通过调用一个用delphi编写的外部可执行文件,我可以从一个语言驱动程序切换到另一个。在这种情况下,我使用的是ANSII850
- 然后,我可以从悖论表中读取数据。但我仍然无法获得良好格式的数据
- 表中的字符串也没有用代码页850进行编码,试图用.Net工具对它们进行解码是行不通的
- 相反,我手动跟踪特殊字符(读取不正确),并用正确的utf8字符替换它们
- 在写作方面,我做的恰恰相反
它有效,但仍然不理想。
您确定正在使用BDE吗?您的示例引用了许多Microsoft部件。
BDE为这些"特殊字符"使用了更高的代码,并使用代码页对其进行解释。看起来850是你认为正确的。如果你只需要向bde发送一个包含你想要的十六进制或十进制字符的字符串,你就可以看到它是否会正确打印。