2

デスクトップアプリケーションの開発にC#とMYSQLを使用しています。

私のフォームの1つに(dgvBookings)があり、データベーステーブルにタイプDataGridViewのフィールドを含むテーブルtblBookingsがあります。specializationBLOB

次のクエリでデータを選択しています。

SELECT * FROM tblBookings WHERE IsActive=1;

次に、DataGridViewを使用してデータをバインドします。

dgvBookings.DataSource = ds.Tables["allbookings"];

ただし、gridviewでデータをバインドすると、BLOBタイプByte[] Arrayの列のすべての行の値が表示されます。specialization

この問題をどのように解決するか、文字列形式のデータが必要です。その列に書き込まれているものはすべて、グリッドにあるとおりに表示される必要があります。

4

3 に答える 3

4

DataSet を使用する前に、バイト配列を文字列に変換する必要があります。


DataTable allBookings = ds.Tables["allbookings"];
DataColumn column = allBookings.Columns.Add("NotABlobAnyMore", typeof(string));

foreach (DataRow row in allBookings.Rows) {
    row[column] = Encoding.Unicode.GetString((byte[])row["specialization"]);
}

dgvBookings.DataSource = allBookings ;

サンプルでは Unicode を使用していますが、バイト配列 (blob) の生成に使用されたエンコーディングを使用する必要があります。

新しい列での更新を許可する場合は、データをデータベースに戻す前に、文字列を (古い列の) バイト配列に戻す必要があります。

于 2009-08-22T19:51:16.937 に答える
1

イベントをシンクしCellFormattingてバイト配列を にStringキャストするか、BLOB を SQL クエリの文字型にキャストします。

于 2009-08-22T18:27:18.120 に答える
1

BLOB に固有の問題は、それが... テキストではないということです。バイナリです。画像(jpgなど)、exe、またはテキストの可能性があります...しかし、どのエンコーディングでしょうか?UTF8? 単純ではありません。それが CLOB である場合は、問題なく動作することを願っていますが、それ以外の場合は、BLOB を手動で解析する必要があると完全に予想されます。そうでない場合、どのように解釈されますか?

任意のBLOB の場合、私が考えることができる最も近いのは、16 進数のようなものを表示することです...しかし、DataTableそれでも挑戦です。あなたは...を介してクラスのためにそれを行うことができますTypeConverter

于 2009-08-22T19:51:28.107 に答える