- PR -

Ole DB Provider FOR ORACLEでのデータ抽出で文字化け

1
投稿者投稿内容
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 2004-02-22 03:10
初心者です。
oracleよりデータを1件抽出し、テキストボックスに貼り付けたのですが、
RH と表示されるはずが文字化けし、次のようになってしまいました。

?†

文字コードを調べたらunicodeで 04X4852、0x2020 となっていました。
webフォームはテキストとボタンが各1個の簡単な画面です。
何が原因なのか見当が付かない状況です。
分かる方がいらしたら、ご教授いただきたくお願いします。
処理内容及び環境は以下の通りです。

◆処理内容
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myConnection As New OleDb.OleDbConnection("Provider=ORAOLEDB.ORACLE.1;Data Source=oraserver;" & _
"Persist Security Info=False; User Id=usr1;Password=usr1;OLEDB.NET=True")
Dim myCommand As New OleDb.OleDbCommand("SELECT id FROM Tbl WHERE Code='123'", myConnection)
myConnection.Open()
Dim myReader As OleDb.OleDbDataReader
myReader = myCommand.ExecuteReader()
While myReader.Read()
TextBox1.Text = myReader.GetString(0)
End While
End Sub

◆環境
WIN2000
NET Framework1.0
VS.NET2002
oracle7.3.4
Ole Db Provider FOR ORACLE
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-23 11:07
 データベースの文字コードと、環境変数NLS_LANGをあわせてください。.NETの問題ではありません。Oracleの設定の問題です。
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 2004-02-23 15:35
Jittaさん回答ありがとうございます。
>データベースの文字コードと、環境変数NLS_LANGをあわせてください
具体的にクライアント?のどのファイルのことでしょうか。
知識不足で申し訳ないのですが、教えていただけると助かります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-23 16:41
 サーバ側で何を指定したかは、オラクルのグローバリゼーションあたりのマニュアルを調べてください。

 クライアント側は、システム環境変数を設定します。OSによって設定の仕方は違います。

95,98,Me:Autoexec.bat
NT,2000,XP:システムのプロパティから設定

 設定の仕方、指定する文字列については、オラクルのマニュアルを調べてください。
hur0308
常連さん
会議室デビュー日: 2004/02/13
投稿数: 20
投稿日時: 2004-02-24 22:19
ありがとうございました。
確認してみます。
未記入
会議室デビュー日: 2005/09/27
投稿数: 1
投稿日時: 2005-09-27 18:14
こんにちわ。
文字が 「?†」などに文字化けしてしまう件について、
今更ですが、同じ問題(だと思う)にはまって一応解決を見たので
報告します。

若干システム構成は違います。
クライアントはWindowsXP+Oracle8iClient(8.1.7)+VB6.0(sp6)アプリです。
サーバーはWindows2003Server+Oracle9i(9.2)と
WindowsNT4.0Server+Oracle7(7.3.4)です。
アプリは上記2つのサーバーからデータを持ってきて表示をしますが、
Oracle7側から持ってきたデータのみ文字化けします。

#ORALCEの文字化けの話題はネットを探してもたくさん出てきますが、
#〜(チルダ)が?になる文字化けの話題がほとんどを占めています。
#で、サーバー側の文字コードセットとクライアントの」文字コードセットを
#JA16JISからJA16JISTILDEに変更するみたいな感じですが、上記のアプリで
#「?†」になってしまうのは多分原因が違うだろうなと漠然と感じてました。

試したこと。
 @VBアプリでOleProvider for ORALCE 8.1.7とADO2.5を使ってレコードセット
  を作成し、その値をテキストボックスに代入したりDebug.Printにすると文
  字化ける。(障害の現象)
 ASQL Plusで普通にSELECT文を流しても、文字化けしない。
 BMS-ACCESS2002をインストールし、ORALCE ODBC Driver 8.1.7で該当テーブルを
  リンクし表示させても文字化けしない。
ここまできてなんとなくですが、OleProviderかVBのキャラクタセットとORA7のキャラクタセットが合わないことが原因ではないかと思ってきました。Ora8i以降とかはきっとUnicode対応していて、Ora7はUnicode対応未対応。VBは内部処理はUnicodeだったと記憶してます。

前置きが長くなりましたが、以下のようにして解決しました。

Dim cnn As New ADODB.Connection
cnn.open ほにゃらら接続文字

Dim rs As New ADODB.Recordset
rs.open "SELECT フィールド1 from テーブル",cnn,ほにゃら

で、
Text1.Text=rs.Fields(0)
とすると文字化けしていたのが
Text1.Text=Strconv(rs.Fields(0),vbUnicode)
とするだけで正常に表示されるようになりました。

#今どきOracle7サーバーにWindowsXPクライアントっていう組み合わせがそもそもナンセンスですよねー。

#お気づきかもしれませんが、なぜORACLEClientが9じゃなくて8なの?
#OracleClient9でOracle7のテーブルをセレクトしたりすると、「フェッチ順序が無効です」とかエラーが出てくるので8で接続することにしたんです。


[ メッセージ編集済み 編集者: 未記入 編集日時 2005-09-27 18:18 ]
1

スキルアップ/キャリアアップ(JOB@IT)