我创建了一个应用程序,该应用程序基本上是在MySQL服务器上查找blob记录,我遇到的问题是,如果由于某种原因Blob字段为空,应用程序就会崩溃。我想到了类似的事情
我目前有
byte[] data = (byte[])DbReader[2];
但我想知道是否有任何方法可以做类似的事情
if (DbReader.IsDbNull(2)
byte[] data = /* DEFAULT VALUE */
else
byte[] data = (byte[])DbReader[2];
但是我可以设置默认值吗? 我尝试过的所有内容都失败了:(
这个怎么样:
byte[] data = null;
数组是引用类型,因此您可以为它们分配 null。稍后您将能够像这样查看数据是否为空:
if(data != null)
{
//there is data inside that array, you can go ahead and use it.
}
编辑:简化
你可以像这样简化你的代码:
byte[] data = DbReader.IsDbNull(2) ? null : (byte[])DbReader[2];
您可以将其设置为空数组:
byte[] data = new byte[0];
如果你打算在多个地方使用它,你可以把它封装在一个扩展方法中......
public static class DbDataReaderExt {
public static T GetOrDefault<T>(this DbDataReader reader, int index, T default_value = default(T)) {
if (reader.IsDBNull(index))
return default_value;
return (T)reader[index];
}
}
。然后就这样使用它...
var data = reader.GetOrDefault<byte[]>(2);
。或者像这样:
var data = reader.GetOrDefault(2, new byte[] { 1, 2, 3 });
顺便说一句,这也应该适用于非byte[]
类型。
您可以尝试 IsDBNull 方法:
object value = DbReader[2];
byte[] data = ... some default value
if (!Convert.IsDBNull(value))
{
data = (byte[])value;
}