参数varbinary数据类型中的空值

如何在参数varbinary数据类型中添加空值?

当我执行以下代码时:

using (SqlConnection myDatabaseConnection1 = new SqlConnection(myConnectionString.ConnectionString)) { using (SqlCommand mySqlCommand = new SqlCommand("INSERT INTO Employee(EmpName, Image) Values(@EmpName, @Image)", myDatabaseConnection1)) { mySqlCommand.Parameters.AddWithValue("@EmpName", textBoxEmpName.Text); mySqlCommand.Parameters.AddWithValue("@Image", DBNull.Value); myDatabaseConnection1.Open(); mySqlCommand.ExecuteNonQuery(); } } 

我得到以下System.Data.SqlClient.SqlException

不允许从数据类型nvarchar到varbinary(max)的隐式转换。 使用CONVERT函数运行此查询。

你可以尝试这样的事情: –

 cmd.Parameters.Add( "@Image", SqlDbType.VarBinary, -1 ); cmd.Parameters["@Image"].Value = DBNull.Value; 

我不知道为什么“DBNull.Value”对我不起作用的原因。 而我发现另一种解决方案可以解决这个问题。

 cmd.Parameters["@Image"].Value = System.Data.SqlTypes.SqlBinary.Null; 

试试这个 :

 mySqlCommand.Parameters.AddWithValue("@Image", new byte[]{}); 
 sqlCommand.Parameters.AddWithValue("@image", SqlBinary.Null); 

我这样做没有问题

 SqlParameter image= new SqlParameter("@Image", SqlDbType.VarBinary, System.DBNull.Value); mySqlCommand.Parameters.Add(image); 

在存储过程中设置空值。 不需要做任何其他事情。

 ex. @photo varbinary(max) = null, ALTER PROCEDURE [dbo].[InsertOurTeam] @name nvarchar(50), @Sname nvarchar(50), @designation nvarchar(50), @photo varbinary(max) = null, @Pname nvarchar(50)=null, @psize bigint=null, @id int output AS BEGIN SET NOCOUNT ON; insert into OurTeam values (@name,@Sname,@designation,@photo,@Pname,@psize); select @id= SCOPE_IDENTITY(); END