1

Imageデータベース テーブルの列にバイナリ イメージがありますnullが、列にいくつかの値がありImageます。そのため、例外がスローされ、

byte[] data = (byte[])ds.Tables[0].Rows[0][0]` null のため。

これをどのように処理しますか?

例外メッセージ、

タイプ 'System.DBNull' のオブジェクトをタイプ 'System.Byte[]' にキャストできません。

私のコード、

using (var sqlConn = new SqlConnection(connstr))
{
    sqlConn.Open();
    ds = new DataSet();

    SqlDataAdapter sqa = new SqlDataAdapter("Select Image from Templates where Shoe='" + selectedShoe + "'", sqlConn);

    sqa.Fill(ds);

    //i got error here
    byte[] data = (byte[])ds.Tables[0].Rows[0][0];

    .....
4

2 に答える 2

7

DBNullキャストを試みる前に、その列を具体的に確認する必要があります。

byte[] data = null;
if (!ds.Tables[0].Rows[0].IsNull(0))
    data = (byte[])ds.Tables[0].Rows[0][0];

問題の列に実際にバイト配列が含まれていない場合、これは同じタイプの例外で失敗することに注意してください。

于 2013-07-06T12:17:04.307 に答える
1

SQLクエリでnullを処理するとうまくいきました。Image 列が null の場合、ISNULL() 関数は次の値 (この例では 0) を返します。

SqlDataAdapter sqa = new SqlDataAdapter("SELECT ISNULL([Image],0) AS Image FROM Templates where Shoe='" + selectedShoe + "'", sqlConn);
于 2016-12-19T01:05:15.117 に答える