从SQL Server读取VARBINARY(MAX)到C#

7
我需要从SQL Server 2008中读取数据行。其中一列的类型是VARBINARY(MAX)。在C#中,我想使用out参数来读取它(并且给定的场景大多满足需求)。
但是我需要指定参数变量的大小以填充C#变量。 在这里,我假设8000就足够了...但是谁知道呢:
database.AddOutParameter(command, "vbCertificate", DbType.Binary, 8000);

因此,问题如下:

  1. SQL Server 2008 的 MAX 数字大小是多少?
  2. 在这种情况下,使用 out 参数是否可行?
3个回答

5
VARBINARY(MAX) 的最大大小为 2 GB 的数据 - 2'147'483'648 字节。
在您的情况下,在 C# 中定义时,我建议使用 int.MaxValue 作为提供的值。
是的,如果您想从 SQL Server 2008 表中获取字节数组,则绝对可以使用 out 参数。

3
SqlClient 中对于 max 类型的大小是 -1。框架将其理解为 max 类型。 - Remus Rusanu
@Remus Rusanu:好的,谢谢 - 很好知道!(但是到目前为止我也没有遇到int.MaxValue的问题 :-) - marc_s
请问为什么我们在需要读取varbinary(max)时一定要使用"out"参数? - CharithJ

4

正如@marc_s所说,我只想添加一些内容。

有两种数据类型

binary [ ( n ) ]

长度为n个字节的固定长度二进制数据,其中n的值从1到8000。 存储大小为n个字节。

varbinary [ ( n | max) ]

可变长度的二进制数据。 n的值可以是1到8000。 max表示最大存储大小为2 ^ 31-1(等于int.MaxValue即2,147,483,647)字节。 存储大小为输入数据的实际长度+ 2个字节。 输入的数据长度可以为0字节。

如果您正在指定max,则应关注varbinary而不是binary

database.AddOutParameter(command, "vbCertificate", DbType.Binary, 8000);

database.AddOutParameter(command, "vbCertificate", SqlDbType.VarBinary, int.MaxValue);


1

我没有在任何地方看到MAX的明确大小。你尝试使用DbType.Object执行这个吗?在msdn上,它被定义为任何未明确定义类型的通用类型。我会尝试一下,看看是否有效。否则,我可能会坚持使用你选择的DbType.Binary。


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