10

我正在使用 SQL Server 2008 存储过程来创建具有以下语法的新记录:

cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()

但结果是:

Operand type clash: nvarchar is incompatible with image 

照片不是唯一的参数,而是唯一的图像,我没有传递一个 nvarchar 而是一个空值,我错过了什么吗?

4

2 回答 2

14

如果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# 转换器- 使用它!

于 2010-03-10T21:35:38.117 回答
0
 Dim photo_NULL As New SqlTypes.SqlBytes
.Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
.CommandType = CommandType.StoredProcedure
F_return = (.ExecuteNonQuery > 0)
于 2010-09-25T08:44:23.193 回答