@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

PostgresのNpgsql接続で文字化け

1
投稿者投稿内容
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-04-07 12:03
VB.NET2003+Postgres(8.1.3)+Npgsqlを利用して接続をしているのですが
SELECTした結果の文字(日本語)が化けてしまいます。
PostgresのエンコーディングはEUC-JPです
以下にコードをつけて起きます、何かご存知の方ご教授願います。

Imports Npgsql

Private cn As NpgsqlConnection

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cn = New NpgsqlConnection("Server=localhost;" _
& "Port=5432;" _
& "User Id=postgres;" _
& "Password=postgres;" _
& "Database=testtable;")
cn.Open()
If cn.State <> ConnectionState.Open Then
MessageBox.Show("接続エラー")
Else
MessageBox.Show("接続OK")

End If

'select
Dim sql As String
Dim da As NpgsqlDataAdapter
Dim row As DataRow
Dim dt As DataTable

sql = "SELECT * FROM table1"

da = New NpgsqlDataAdapter(sql, cn)

dt = New DataTable
da.Fill(dt)

If (dt.Rows.Count > 0) Then
For Each row In dt.Rows
Debug.WriteLine(row(1).ToString())  <--ここで日本語の内容を出力すると文字化けになる
Next

End If

End Sub
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-04-07 13:12
DB設定よりの発言しかできないのですが、
コード:
Dim nsqlCmd As NpgsqlCommand = New NpgsqlCommand("set client_encoding = sjis ;", cn)
nsqlCmd.ExecuteNonQuery()


を実行して、クライアントがSJISであることを通知するか、

PostgreSQLで以下のALTER DATABASE文を実行して、
あらかじめクライアントはSJISだと設定しておくかで解消できることは確認しました。
コード:
alter database testtable set client_encoding = sjis ;


インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2006-04-07 13:47
夏椰|。σ)o、さん、ありがとうございます。
Dim nsqlCmd As NpgsqlCommand = New NpgsqlCommand("set client_encoding = sjis ;", cn)
nsqlCmd.ExecuteNonQuery()
を実行して、クライアントがSJISであることを通知する

この方法で、問題ないことを確認いたしました。
1

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