当我编写插入代码时,一切都很好。例如:
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();
如何执行更新而不是删除/插入?
感谢您的回复!
答案 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)。”