C# 参数varbinary数据类型中的Null值

C# 参数varbinary数据类型中的Null值,c#,winforms,sql-server-2008,parameters,dbnull,C#,Winforms,Sql Server 2008,Parameters,Dbnull,如何在参数varbinary数据类型中添加空值 当我执行以下代码时: using (SqlConnection myDatabaseConnection1 = new SqlConnection(myConnectionString.ConnectionString)) { using (SqlCommand mySqlCommand = new SqlCommand("INSERT INTO Employee(EmpName, Image) Values(@EmpName, @Imag

如何在参数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;

我这样做没有问题

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

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

我不知道为什么“DBNull.Value”对我不起作用。 我想出了另一个解决办法

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

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

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

谢谢-1代表什么?它是长度,长度为-1的SqlDbType.VarBinary至少在理论上等同于VarBinary(MAX)你怎么知道数据类型lenght是MAX?我不知道…我只是假设!!;)@罗纳尔迪尼奥学习编码使用参数。AddWithValue
参数。Add
不推荐使用,这个答案可能更好,唯一需要注意的是,它不会插入
NULL
数据(在表中你会看到
NULL
),而是插入
空的
数据(在表中你什么也看不到)正如罗纳尔迪尼奥所说,这是最好的解决方案,感谢ShamseerAs@RonaldinholanCode的回答,需要注意的是
byte[0]
null
不同。但是不推荐使用参数.Add,而此答案可能会回答以下问题:添加更多详细信息,例如为什么以及如何工作,将提高其质量这对我来说很有效,并且与以前发送DBNull.Value的帮助器方法相适应,如果字节[]值为空。4年后,这应该是公认的答案<代码>SqlTypes.SqlBinary.Null获胜。谢谢你,善良的人。我有一个小小的检测策略,可以处理
byte[]
cast-as
object
在一篇相关文章中的空实例:解决了我的问题;)
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