我们有一个用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字符的列中的字符而不是ÄÄ或ÈÈ。
在select查询中,我们有一个varchar2类型的列(例如COLUMN_A),它包含扩展的ascii字符(例如ÄÄ或ÈÈ)。当我们检查结果数据表时,我们发现了一个?字符而不是ÄÄ或ÈÈ。我们认为问题出在从us7ascii oracle数据类型到16b unicode的vbnet system.string的转换中。 varchar2 oracle列似乎被映射为system.string datacolumn类型。
为了进一步调查,我们尝试使用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
在select查询中,我们有一个varchar2类型的列(例如COLUMN_A),它包含扩展的ascii字符(例如ÄÄ或ÈÈ)。当我们检查结果记录集时,我们找到了正确的字符(ÄÄ或ÈÈ)。
有谁知道如何告诉vbnet数据表不进行任何类型转换?