我们有一个用 vb.net 4.5 编写的应用程序,它使用 ODBC 驱动程序从 Oracle 10g 数据库中检索数据。数据库字符集设置为 us7ascii。我们有包含扩展 ascii 字符的表(例如 ÄÄ 或 ÈÈ )。当我们尝试使用以下代码检索数据时:
Dim thisCN1 As New System.Data.Odbc.OdbcConnection(connectionString)
Dim szSql as string="select * from mytable"
Dim dt As New DataTable
Dim dataAdapter As New System.Data.Odbc.OdbcDataAdapter(szSql, thisCN1)
dataAdapter.Fill(dt)
我们有 ??字符而不是 ÄÄ 或 ÈÈ 在包含扩展 ascii 字符的列中。在选择查询中,我们有一个 varchar2 类型的列(例如 COLUMN_A ),其中包含扩展的 ascii 字符(例如 ÄÄ 或 ÈÈ )。当我们检查结果数据表时,我们发现了一个?字符而不是 ÄÄ 或 ÈÈ 。我们认为问题在于从 us7ascii oracle 数据类型转换为 16 位 unicode 的 vbnet system.string。varchar2 oracle 列似乎映射为 system.string 数据列类型。
为了进一步调查,我们尝试使用 ADODB 记录集获取数据。我们使用了以下代码:
Dim rs As New ADODB.Recordset
Dim cn As New ADODB.Connection
Dim szSql as string="select * from mytable"
cn.ConnectionString = "connectionstring"
cn.Open()
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.Open(szSql, cn)
rs.ActiveConnection = Nothing
在选择查询中,我们有一个 varchar2 类型的列(例如 COLUMN_A ),其中包含扩展的 ascii 字符(例如 ÄÄ 或 ÈÈ )。当我们检查结果记录集时,我们发现了正确的字符( ÄÄ 或 ÈÈ )。
有谁知道如何告诉 vbnet 数据表不要进行任何类型转换?