私はDBFファイルに接続された交流#プログラムを、持っている:(文字列データ
OdbcConnection oconn = new OdbcConnection();
oconn.ConnectionString =
"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + pelna_sciezka + ";Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
oconn.Open();
OdbcCommand ocmd = oconn.CreateCommand();
ocmd.CommandText = @"SELECT * FROM " + pelna_sciezka + " where Kod_kontr = '" + row.KNH_KOD + "'";
// ocmd.ExecuteNonQuery();
OdbcDataReader odr = ocmd.ExecuteReader();
while (odr.Read())
{
kod_kontr = odr["Kod_kontr"].ToString();
Nzwakontr1 = odr["Nzwakontr1"];
Nzwakontr2 = odr["Nzwakontr2"];
}
接続は非常にうまく機能しているが、私は地元の文字列変数にデータをアセンブルしたい場合kod_kontr、nzwakontr1)、値はSystem.Byte[]
です。このdbfから他のタイプのデータ(f.ex. date、numericなど)を取得する場合は、すべてがうまくいきます。問題は、varcharデータの場合のみです。どうすれば問題を解決できますか?私は答えを読んだアントニオ・バクラのヘルプによると、任意のヘルプ
ため
ありがとう:
私は、OLEにODBCから変更し、必要があります。 - へのConnectionString変更: oconn。 ConnectionString = "Provider = vfpoledb.1;データソース=" + pelna_sciezka + ";照合順序= machine"; 変更コード:
OleDbDataReader odr = ocmd.ExecuteReader(); OdczytajTabliceBajtow
while (odr.Read())
{
// byte[] A = Encoding.GetEncoding(Encoding.Default.CodePage).GetBytes(odr.GetString(0));
// string p = Encoding.Unicode.GetString((Encoding.Convert(Encoding.GetEncoding(850), Encoding.Unicode, A)));
kod_kontr = OdczytajTabliceBajtow(odr["Kod_kontr"]);
Nzwakontr1 = OdczytajTabliceBajtow(odr["Nzwakontr1"]);
Nzwakontr2 = OdczytajTabliceBajtow(odr["Nzwakontr2"]);
}
:
プライベート文字列OdczytajTabliceBajtow(オブジェクトp) {エンコーディングenc8 = Encoding.ASCII。 文字列wynik = ""; Byte [] bytes =(Byte [])p; StringBuilder sb = new StringBuilder(); sb.Append(Encoding.ASCII.GetChars(bytes)); wynik = sb.ToString(); return wynik; }
これは私の問題の解決方法です。皆、ありがとうございました。
これらの列のデータ型は、おそらく 'GetString'を呼び出す必要があります。http://msdn.microsoft.com/en-us/library/system.data.odbc.odbcdatareader.getstring .aspx。ネイティブ形式を取得する代わりに。 – Jodrell
この列には、varchar型(dbf構造のC(100))があります。他の型は非常にうまく変換されていますが、 'C'型のみで問題が発生します – BKl
ドキュメントには、「指定された列の値をネイティブ形式で取得します」というドキュメントが記載されているので、列はあなたの希望のタイプと互換性があります。インデックスアクセサは、VFPテキストデータをバイト配列として返しますが、完全に不合理ではありません。テキストのエンコーディングを知っているなら、 'System.Text'名前空間を使って.Net文字列に変換することができます。もしそうでなければ、 'GetString'を呼び出してODBC層に変換をさせることができます。 – Jodrell