操作数类型冲突:nvarchar与image不兼容。

10

我正在使用一个SQL Server 2008存储过程,按照以下语法来创建一个新的记录:

cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()
但结果是:
Operand type clash: nvarchar is incompatible with image 

照片不是唯一的参数,但是是唯一的图像参数,我传递的不是nvarchar类型而是null值,我是否漏掉了什么?

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转换成C#的工具,一定要使用它!


1
C# 也可以写成一行:cmd.Parameters.Add(new SqlParameter("photo", SqlDbType.Image) { Value = DBNull.Value }); - Johann

0
 Dim photo_NULL As New SqlTypes.SqlBytes
.Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
.CommandType = CommandType.StoredProcedure
F_return = (.ExecuteNonQuery > 0)

1
如果您发布代码、XML或数据样例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码样例”按钮({ })以获得良好的格式和语法突出显示! - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接