我正在使用 SQL Server 2008 存储过程来创建具有以下语法的新记录:
cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()
但结果是:
Operand type clash: nvarchar is incompatible with image
照片不是唯一的参数,而是唯一的图像,我没有传递一个 nvarchar 而是一个空值,我错过了什么吗?
我正在使用 SQL Server 2008 存储过程来创建具有以下语法的新记录:
cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()
但结果是:
Operand type clash: nvarchar is incompatible with image
照片不是唯一的参数,而是唯一的图像,我没有传递一个 nvarchar 而是一个空值,我错过了什么吗?
如果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-to-C# 转换器- 使用它!
Dim photo_NULL As New SqlTypes.SqlBytes
.Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
.CommandType = CommandType.StoredProcedure
F_return = (.ExecuteNonQuery > 0)