ODBC ドライバーを使用して Oracle 10g データベースからデータを取得する vb.net 4.5 で記述されたアプリケーションがあります。データベースの文字セットは 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 文字を含む列では、ÄÄ または ÈÈ の代わりに文字を使用します。選択クエリには、拡張 ASCII 文字 (たとえば ÄÄ や ÈÈ など) を含むタイプ varchar2 の列 (たとえば COLUMN_A ) があります。結果のデータテーブルを調べると、? ÄÄ または ÈÈ の代わりの文字。問題は、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
選択クエリには、拡張 ASCII 文字 (たとえば ÄÄ や ÈÈ など) を含むタイプ varchar2 の列 (たとえば COLUMN_A ) があります。結果のレコードセットを調べると、正しい文字 ( ÄÄ または ÈÈ ) が見つかりました。
vbnetデータテーブルに型変換を行わないように指示する方法を知っている人はいますか?