使用C#从数据库中读取图像?

时间:2009-06-10 17:11:52

标签: c# image blob

我有这个问题:

SELECT PICTURE FROM LOGO WHERE LOGONO = ?

(“PICTURE”是SQL Server中的Image列)

这段代码用于读取数据:

using (DbDataReader reader = command.ExecuteReader())
{
    if (reader.HasRows)
    {
        if (!reader.IsDBNull(0))
        {
            byte[] buffer = new byte[8000];
            while (reader.GetBytes(0, 0, buffer, 0, 8000) > 0)
                picture.AddRange(buffer);
        }
     }
}

问题是当列包含null时,始终会在reader.IsDBNull(0)语句上抛出InvalidOperationException(“行/列不存在数据”)。

MSDN说:

  

在调用类型化的get方法(例如,GetByte,GetChar等)之前调用此方法以查看是否存在空列值,以避免引发错误。

如何在不触发异常的情况下检查列是否包含null?我是以错误的方式解决这个问题吗?

4 个答案:

答案 0 :(得分:8)

在访问任何数据之前,您需要致电阅读器。Read()。来自MSDN文档的阅读:

  

DataTableReader的默认位置在第一条记录之前。因此,您必须调用Read以开始访问任何数据。

答案 1 :(得分:2)

您没有致电reader.Read()。由于您使用的是阅读器,您需要检查Read是否为单个记录返回true,或者使用while循环迭代所有记录。

if (reader.Read())
{
  // handle single record
}

// or

while (reader.Read())
{
  // handle each record
}

答案 2 :(得分:1)

不是更好......

if (!reader.IsDBNull(#))
{...}

或者也许是短版......

reader.IsDBNull(#) ? [default] : [value];

???

答案 3 :(得分:0)

我总是使用以下检查,它似乎一直对我有效。

if (reader[0] != null && reader[0] != DBNull.Value)
{
}