【问题标题】:c# handle null byte array from mysql queryc#处理来自mysql查询的空字节数组
【发布时间】:2012-07-05 04:12:15
【问题描述】:

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

我现在有

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

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

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

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

【问题讨论】:

  • 默认你的意思是在SQL某处定义的默认值?
  • 不只是在此阶段定义的标准值,例如 1、2 或 3。

标签: c# mysql bytearray byte blob


【解决方案1】:

这个怎么样:

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];

【讨论】:

  • 对此进行了细微的修改,但感谢您的回答! :)
【解决方案2】:

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

byte[] data = new byte[0];

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你可以试试IsDBNull方法:

      object value = DbReader[2];
      byte[] data = ... some default value
      if (!Convert.IsDBNull(value))
      {
          data = (byte[])value;
      }
      

      【讨论】:

        猜你喜欢
        • 2015-09-04
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多