0

C#初心者のため、くだらない質問で申し訳ありません。

現在、OLEDB を使用して c# でタスクを実行しています。シナリオは、ユーザー名、パスワードなどの情報を持つ 1 つのテーブルに挿入したいということです。データベースは SQL Server です。列パスワードのデータ型は varbinary(100) です。

文字列データ型から SQL の varbinary と同等のデータ型に変換したいと考えています。少しやってみましたが、うまくいきませんでした。

最初は で試しましたreader.GetString(5)。しかし、私が得た例外は:

"Specified cast is not valid."

* 以下のことを書き忘れていました *

私が使用したリーダーは OleDbDataReader です。

oleParameter[7] = new OleDbParameter("@Password", OleDbType.VarBinary, 100);
oleParameter[7].Value = reader1.GetBytes(5);

(ここでは、あるテーブルから読み取り、別のテーブルに挿入しています。)

私を助けてください。

ありがとう。

4

4 に答える 4

0

バイナリ データを文字列として読み取ることはできませんSqlDataReader.GetBytes。メソッドを使用してください。

これを見てください...

于 2012-11-01T12:50:38.133 に答える
0

アプリケーションと varbinary 列の間でバイトを送受信する必要があります。バイト配列を取得したら、それを文字列に変換できます。

var bytes = reader.GetBytes(5);
var myString = Encoding.UTF8.GetString(bytes); // use the same encoding used
                                               // to create the bytes
                                               // when saving to the DB.

文字列をバイト配列に変換するには:

var bytes = Encoding.UTF8.GetBytes(myString);
于 2012-11-01T12:54:42.980 に答える
0

私は解決策を得ました。

以下のコード行を書く代わりに、

oleParameter[7] = new OleDbParameter("@Password",  OleDbType.VarBinary, 100);
oleParameter[7].Value = reader1.GetBytes(5);

以下のコードのように試しました:

  byte[] array = (byte[])reader1.GetValue(9);
  oleParameter[7] = new OleDbParameter("@Password",array);

このフィールドのデータ型を指定せず、コンストラクタ OleDbParameter(string name, object value) を使用しました。

そして、それはうまくいきます。

Khellang と Eren Ersönmez の回答に感謝します。

于 2012-11-05T05:20:55.803 に答える