我正在使用一个SQL Server 2008存储过程,按照以下语法来创建一个新的记录:
cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()
但结果是:Operand type clash: nvarchar is incompatible with image
照片不是唯一的参数,但是是唯一的图像参数,我传递的不是nvarchar类型而是null值,我是否漏掉了什么?
我正在使用一个SQL Server 2008存储过程,按照以下语法来创建一个新的记录:
cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()
但结果是:Operand type clash: nvarchar is incompatible with image
照片不是唯一的参数,但是是唯一的图像参数,我传递的不是nvarchar类型而是null值,我是否漏掉了什么?
如果您将 DBNull.Value
作为值传递,ADO.NET 就无法确定参数的类型。如果指定字符串或整数值,则可以从提供的值中推导出 SQL 参数的类型 - 但是应将 DBNull.Value
转换成什么类型呢?
当传递 NULL 值时,需要明确地指定 SqlDbType
:
Dim photoParam As New SqlParameter("@photo", SqlDbType.Image)
photoParam.Value = DBNull.Value
cmd.Parameters.Add(photoParam)
cmd.ExecuteNonQuery()
希望这能够起作用!
更新:在C#中同样的事情应该是:
SqlParameter photoParam = new SqlParameter("@photo", SqlDbType.Image);
photoParam.Value = DBNull.Value;
cmd.Parameters.Add(photoParam);
cmd.ExecuteNonQuery();
有一个非常好用、免费的VB.NET转换成C#的工具,一定要使用它!
Dim photo_NULL As New SqlTypes.SqlBytes
.Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
.CommandType = CommandType.StoredProcedure
F_return = (.ExecuteNonQuery > 0)
cmd.Parameters.Add(new SqlParameter("photo", SqlDbType.Image) { Value = DBNull.Value });
- Johann