参数 varbinary 数据类型中的空值
Posted
技术标签:
【中文标题】参数 varbinary 数据类型中的空值【英文标题】:Null value in a parameter varbinary datatype 【发布时间】:2013-08-11 10:28:24 【问题描述】:如何在参数 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 函数运行此查询。
【问题讨论】:
我有一个小检测策略来处理byte[]
在相关帖子中转换为object
的空实例:***.com/a/42905940/97964
【参考方案1】:
我不知道为什么“DBNull.Value”对我不起作用。 我想出另一种解决方案可以解决这个问题。
cmd.Parameters["@Image"].Value = System.Data.SqlTypes.SqlBinary.Null;
【讨论】:
这对我有用,并且适合以前发送 DBNull.Value 如果 byte[] 值为空的辅助方法。 4 年后——这应该是公认的答案!SqlTypes.SqlBinary.Null
赢得胜利。谢谢你,善良的人。接受我的投票。【参考方案2】:
sqlCommand.Parameters.AddWithValue("@image", SqlBinary.Null);
【讨论】:
虽然此答案可能会回答问题,但会添加更多细节,例如为什么以及如何工作将提高其质量【参考方案3】:你可以试试这样的:-
cmd.Parameters.Add( "@Image", SqlDbType.VarBinary, -1 );
cmd.Parameters["@Image"].Value = DBNull.Value;
【讨论】:
谢谢。 -1 是什么意思? 它是长度,长度为-1的SqlDbType.VarBinary相当于VARBINARY(MAX),至少理论上是这样。 ;) 你怎么知道数据类型长度是 MAX? 我不知道...我只是假设! ;) @RonaldinhoLearnCoding 使用Parameters.AddWithValue【参考方案4】:试试这个:
mySqlCommand.Parameters.AddWithValue("@Image", new byte[]);
【讨论】:
Parameters.Add
已弃用,这个答案可能更好,唯一需要注意的是,它不会插入 NULL
数据(在表格中您会看到单词 NULL
),而是插入EMPTY
数据(在表格中你什么都看不到)
这是小罗所说的最好的解决方案,感谢Shamseer的回答
正如@RonaldinhoLearnCoding 所说,重要的是要注意byte[0]
与null
不同。【参考方案5】:
我这样做没有问题
SqlParameter image= new SqlParameter("@Image", SqlDbType.VarBinary, System.DBNull.Value);
mySqlCommand.Parameters.Add(image);
【讨论】:
但不推荐使用Parameters.Add【参考方案6】:在您的存储过程中设置空值。不需要做任何其他事情。
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
【讨论】:
解决了我的问题 ;)以上是关于参数 varbinary 数据类型中的空值的主要内容,如果未能解决你的问题,请参考以下文章
如何从列类型列表中删除 pandas DataFrame 中的空值