操作数类型冲突:nvarchar与图像不兼容

fer*_*rer 10 vb.net parameters dbnull image

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

cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)

但结果是:

Operand type clash: nvarchar is incompatible with image 
Run Code Online (Sandbox Code Playgroud)

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

mar*_*c_s 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()
Run Code Online (Sandbox Code Playgroud)

我希望这应该有效!

更新: C#中同样的事情是:

SqlParameter photoParam = new SqlParameter("@photo", SqlDbType.Image);
photoParam.Value = DBNull.Value;
cmd.Parameters.Add(photoParam);

cmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

有一个伟大的,免费的,非常有用的VB.NET-to-C#转换器 - 使用它!