Paradox DB:查询中的西里尔字,C#

时间:2013-04-19 12:23:43

标签: c# .net database encoding paradox

我需要对Paradox数据库执行查询。 有一个表,包含带有西里尔字的数据,我试图在这样的查询中使用西里尔语参数:

select * 
from AccessZone zn
where zn.Name= 'Территория'

在AccessZone表中,我有名称为“Территория”的记录,但此查询返回0行。

我正在将此查询编码为windows-1252编码,但结果相同。

当我得到一个包含西里尔值的查询结果时,我打破了像'??????'这样的符号,所以,我正在从windows-1252解码它们,然后得到正确的值。这个技巧我决定使用,当我用西里尔符号执行查询但它没有影响结果,我仍然有0行。

我正在使用c#进行编码,如下所示:

private static string DecodeTo1252(string source)
{
    Encoding srcEncodingFormat = Encoding.Unicode;
    Encoding dstEncodingFormat = Encoding.GetEncoding("windows-1252");
    try
    {
        byte[] output = Encoding.Convert(srcEncodingFormat, 
                                         dstEncodingFormat, 
                                         srcEncodingFormat.GetBytes(source));

        return dstEncodingFormat.GetString(output);
    }
    catch (Exception)
    {

    }
    return string.Empty;
}

那么,我该如何构建一个查询,或者将其编码为查询到自相矛盾的DB?

1 个答案:

答案 0 :(得分:0)

Paradox在DOS和Windows产品中有多个版本。但大部分或全部使用ascii编码与该系统中的“代码页”。您可能正在获得正确的记录。但我不确定如何在Unicode中显示它。我认为Unicode显示获得的数据有问题。我认为您必须了解最初存储数据时使用的代码页。 Paradox可能将此称为排序顺序,至少在某些版本中由Paradox.sor表定义。