1

我的数据库表的列中有二进制图像,但Image列中有一些nullImage。所以抛出异常,

byte[] data = (byte[])ds.Tables[0].Rows[0][0]` 因为为空。

如何处理?

异常消息,

无法将“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 查询中处理空值对我有用。如果您的 Image 列为空,则 ISNULL() 函数将返回您的下一个值(在此示例中为 0)。

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