c#处理mysql查询中的空字节数组
我创建了一个应用程序,它基本上在mysql服务器上查找blob记录。我遇到的问题是,无论出于何种原因,如果blob字段为空,应用程序就会崩溃。我想到了类似的事情c#处理mysql查询中的空字节数组,c#,mysql,bytearray,byte,blob,C#,Mysql,Bytearray,Byte,Blob,我创建了一个应用程序,它基本上在mysql服务器上查找blob记录。我遇到的问题是,无论出于何种原因,如果blob字段为空,应用程序就会崩溃。我想到了类似的事情 if (DbReader.IsDbNull(2) byte[] data = /* DEFAULT VALUE */ else byte[] data = (byte[])DbReader[2]; 我现在有 byte[] data = (byte[])DbReader[2]; 但我想知道是否有什么方法可以做到 if
if (DbReader.IsDbNull(2)
byte[] data = /* DEFAULT VALUE */
else
byte[] data = (byte[])DbReader[2];
我现在有
byte[] data = (byte[])DbReader[2];
但我想知道是否有什么方法可以做到
if (DbReader.IsDbNull(2)
byte[] data = /* DEFAULT VALUE */
else
byte[] data = (byte[])DbReader[2];
但是我可以设置一个默认值吗??我尝试的一切都失败了:(这个怎么样:
byte[] data = null;
数组是引用类型,因此您可以为其分配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];
var data = reader.GetOrDefault(2, new byte[] { 1, 2, 3 });
编辑:简化
您可以将代码简化如下:
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];
var data = reader.GetOrDefault(2, new byte[] { 1, 2, 3 });
您可以将其设置为空数组:
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];
}
}
顺便说一句,这也适用于非
byte[]
类型。默认情况下,您指的是在SQL中定义的某个地方的默认值?不只是在这一阶段定义的标准值,例如1、2或3。在这方面实现了一点变化,但感谢您的回答!)