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

时间:2011-02-09 17:02:38

标签: c# sql sql-server ado.net

我需要从SQL Server 2008读取数据行。其中一列的类型为VARBINARY(MAX)。在C#中,我想使用out参数来读取它(并且给定的场景主要满足需求)。

但我需要指定参数变量大小来填充C#变量。 在这里我假设8000就够了......但是谁知道:

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

所以问题是:

  1. SQL Server 2008的MAX数量是多少?
  2. 这种情况可以使用out参数吗?

3 个答案:

答案 0 :(得分:5)

VARBINARY(MAX)的最大大小为2 GB数据 - 2'147'483'648字节。

在您的情况下,在C#中定义时,我建议使用int.MaxValue作为要提供的值。

是的,如果你想从SQL Server 2008表中获取字节数组,那么你绝对可以使用out参数。

答案 1 :(得分:4)

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

有两种数据类型

二进制 [(n)]

长度为n个字节的固定长度二进制数据,其中n是1到8,000之间的值。存储大小为n个字节。

varbinary [(n | max)]

可变长度二进制数据。 n可以是1到8,000之间的值。 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);

答案 2 :(得分:1)

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