0

私はdbfファイルに接続されているac#プログラムを持っています:

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から他のタイプのデータ(日付、数値など)を取得したい場合、すべてが正常に機能しています。問題はvarcharデータのみです。どうすれば問題を解決できますか?

助けてくれてありがとう


アントニオ・バクラによると、私は答えを読んだのを助けます:

ODBCからOLEに変更する必要があります。--connectionstringを次のように変更します。oconn.ConnectionString="Provider= vfpoledb.1; Data Source =" + pelna_sciezka + "; Collat​​ing Sequence = machine"; そのためのコードを変更します。

OleDbDataReader odr = ocmd.ExecuteReader();

            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:

プライベート文字列OdczytajTabliceBajtow(object p){Encoding enc8 = Encoding.ASCII; string wynik = ""; Byte [] bytes =(Byte [])p; StringBuilder sb = new StringBuilder(); sb.Append(Encoding.ASCII.GetChars(bytes)); wynik = sb.ToString(); wynikを返します。}

これが私の問題の解決策です。助けてくれてありがとう。

4

1 に答える 1

3

FoxPro用のOleDBドライバーを使用することをお勧めします。これらの問題は発生せず、速度が大幅に向上します。リンクは次のとおりです。

http://www.microsoft.com/en-us/download/details.aspx?id=14839

そして、文字フィールドの文字列として DataReader から値を取得します

于 2012-05-08T10:05:17.803 に答える