在SQL Server中将字节数组保存到VarBinary列只插入了一个字节

4

我有一个问题——我试图将byte[]保存到数据库中,但我发现它只适用于一个字节。

我有许多浮点数,我将其转换为byte[]并将其用作参数:

param = new SqlParameter(name, type, ((byte[])value).Length);

类型为VarBinary,值为字节数组。

我将该参数添加到我的SqlCommand中,并在执行之前,整个字节数组“坐落”在该参数中,_msize该参数的大小是正确的(我认为20字节的大小是正确的)。我的SQL服务器只显示保存了1个字节,尝试检索它时,我只得到了一个字节。我的列为VarBinary(200)

有什么建议吗?


我认为这篇帖子中的答案可以解决问题:https://dev59.com/uXNA5IYBdhLWcg3wKam3 - Dominic Scanlan
展示你设置参数值的代码。 - Joel Coehoorn
1个回答

5
如果您正在使用存储过程,并且将参数定义为varbinary,那么根据MSDN文档,您将获得默认长度1字节

在数据定义或变量声明语句中未指定n时,默认长度为1。 在CAST函数未指定n时,缺省长度为30。

因此,如果您有一个存储过程,请使用以下方式指定长度。

@MyData VARBINARY

那么你只有一个字节 - 你需要将它改为类似的内容。
@MyData VARBINARY(200) 

或其他适合您的内容

(这段话与IT技术无关)

@JoelCoehoorn:是的 - 在C#中 - 但如果这个C#代码调用一个使用该参数的T-SQL存储过程,而没有指定长度呢?C#有所有的长度信息 - 但在T-SQL存储过程内部,你只能获得1字节varbinary数据.... - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接