使用C#更新sql server`varbinary`列时出现问题

时间:2011-08-04 18:40:06

标签: c# sql-server

当我编写插入代码时,一切都很好。例如:

dataCommand.CommandText = "use mydb; INSERT INTO mytable VALUES(@binaryvalue);
dataCommand.Parameters.Add("@binaryvalue", SqlDbType.VarBinary, 256).Value = mycard;
dataCommand.ExecuteNonQuery();

但是,如果我尝试更新,它将无法正常工作。我使用.WRITE方法,但它不会这样做:

dataCommand.CommandText = "use mydb; update mytable set mycolumn .Write(@binaryvalue, 0, NULL) where myid = " + wid;
dataCommand.Parameters.Add("@binaryvalue", SqlDbType.VarBinary, 256).Value = mycard;
dataCommand.ExecuteNonQuery();

如何执行更新而不是删除/插入?

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

问题可能是NULL

.WRITE (expression,@Offset,@Length)         (reference)
.Write(@binaryvalue, 0, NULL)               (your code)

尝试将内容的长度改为NULL

  

@Length是列中节的长度,从@Offset开始,由表达式替换。 @Length是bigint,不能是负数。 如果@Length为NULL,则更新操作会将@Offset中的所有数据删除到column_name值的末尾。

此处有更多信息:http://msdn.microsoft.com/en-us/library/ms177523.aspx

答案 1 :(得分:0)

表中二进制列的确切类型是什么?是VARBINARY(MAX)?如果没有,请尝试一下,看看它是否有效。 根据文件:

  

“使用.WRITE(expression,@ Offset,@ Length)子句执行varchar(max),nvarchar(max)和varbinary(max)数据类型的部分或完全更新”

  

“要与其他字符或二进制数据类型实现.WRITE的相同功能,请使用STUFF(Transact-SQL)。”