C#-如果未提供字节数组,如何传递空值?

时间:2018-09-28 13:22:49

标签: c# image sql-server-2008 parameters .net-4.0

如果未向null提供ImageByteArray,则我尝试将Parameters.Add的值传递给图像数据库字段

cmd.Parameters.Add(new SqlParameter("@Img", SqlDbType.Image)).Value =
    DBNull.Value ? null : ImageByteArray;

但是我收到错误提示

  

不能将类型'System.DBNull'隐式转换为'bool'

首先是正确的方法>

如果是,如果未提供null,如何传递ImageByteArray值?

如果不提供字节数组,我不知道我想做的事情是将null传递给参数,所以我避免使用Procedure or function expects parameter '@img', which was not supplied.

2 个答案:

答案 0 :(得分:1)

DBNull.Value ? null : ImageByteArray;

这部分是错误的。因为三元运算符需要为布尔结果进行比较。尝试以下一项;

(object)ImageByteArray ?? DBNull.Value;

如果ImageByteArray为null,它将为您的sql参数分配DBNull.Value。

答案 1 :(得分:1)

这是我正在使用的:

command.Parameters.Add("@Img", SqlDbType.VarBinary, ImageByteArray == null ? -1 : 
ImageByteArray.Length).Value = ImageByteArray ?? (object)DBNull.Value;

基本上,当您将字节数组发送到数据库时,需要指定它是否为空。发送-1表示长度意味着接收到的数组为空。