2

我创建了一个基本上在 mysql 服务器上查找 blob 记录的应用程序我遇到的问题是,如果由于某种原因 blob 字段为空,则应用程序崩溃。我想到了类似的东西

我目前有

byte[] data = (byte[])DbReader[2];

但我想知道是否有任何方法可以做类似的事情

if (DbReader.IsDbNull(2)
    byte[] data = /* DEFAULT VALUE */
else
    byte[] data = (byte[])DbReader[2];

但我可以设置一个默认值吗?我尝试过的一切都失败了:(

4

4 回答 4

5

这个怎么样:

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];
于 2012-07-04T16:37:20.230 回答
1

您可以将其设置为空数组:

byte[] data = new byte[0];
于 2012-07-04T16:40:26.080 回答
1

如果你打算在多个地方使用它,你可以将它封装在一个扩展方法中......

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[]类型。

于 2012-07-04T17:42:13.763 回答
0

您可以尝试IsDBNull方法:

object value = DbReader[2];
byte[] data = ... some default value
if (!Convert.IsDBNull(value))
{
    data = (byte[])value;
}
于 2012-07-04T16:41:29.563 回答