0

我在一个系统上使用 Access 数据库,在另一个系统上使用 SQL Server。数据在这两个系统之间同步。问题是 Access 数据库中表中的一个字段是双字节格式的备注字段。当我在 Windows 窗体中使用 DataGridView 读取此数据时,文本显示为 ???。此外,当将此字段的数据插入 sql server 数据库 nvarchar(max) 字段时,非英文字符将插入为???。

如何从备注字段中获取数据,将其编码转换为 Unicode,以便它在 SQL Server 数据库中也正确显示?

请帮忙!!!

4

2 回答 2

0

我对数据网格控件没有直接经验,但我已经注意到某些数据库值无法通过 MS-Access 控件正确显示。例如,Uniqueidentifiers 设置为 '?????' 显示在表单上时的值。您可以在调试窗口中尝试此操作,其中“myIdField”控件绑定到来自底层记录集的“myIdField”字段(唯一标识符类型字段):

? screen.activeForm.recordset.fields("myIdField")
{F0E3C822-BEE9-474F-8A4D-445A33F363EE}

? screen.activeForm.controls("myIdField")
????

以下是访问帮助关于此问题的说明:

Microsoft Jet 数据库引擎将 GUID 存储为字节类型的数组。但是,Microsoft Access 不能从窗体或报表上的控件返回字节数据。为了从控件返回 GUID 的值,您必须将其转换为字符串。要将 GUID 转换为字符串,请使用 StringFromGUID 函数。要将字符串转换回 GUID,请使用 GUIDFromString 函数。

因此,如果您从控件中提取值以更新表(直接或通过记录集),您可能会遇到类似的发行者......

一种解决方案是直接从记录集原始值更新数据。另一种选择是使用包含必要转换指令的查询打开原始记录集,以便通过控件正确显示该字段。我通常在类似的情况下,我必须操作来自多个数据源(例如 MS-Access 和 SQL Server)的 uniqueIdentifier 字段,将这些字段“标准化”为记录集中的文本。然后使用以下查询构建记录集:

  • SQL 服务器

    “选择转换(nvarchar(36),myIdField)作为myIdField,.... FROM ....”

  • MS-Access

    “SELECT stringFromGUID(myIdField) as myIdField, .... FROM ....”

于 2011-10-04T07:31:12.827 回答
0

我通过如下转换编码解决了这个问题:

        //Define Windows 1252, Big5 and Unicode encodings
        System.Text.Encoding enc1252 = System.Text.Encoding.GetEncoding(1252);
        System.Text.Encoding encBig5 = System.Text.Encoding.GetEncoding(950);
        System.Text.Encoding encUTF16 = System.Text.Encoding.Unicode;

        byte[] arrByte1 = enc1252.GetBytes(note);  //string to be converted
        byte[] arrByte2 = System.Text.Encoding.Convert(encBig5, encUTF16, arrByte1);
        string convertedText = encUTF16.GetString(arrByte2);
        return convertedText;

谢谢大家的投稿!

于 2011-10-12T01:36:22.793 回答