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

Sas*_*nyi 7 c# sql sql-server ado.net

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

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

database.AddOutParameter(command, "vbCertificate", DbType.Binary, 8000);
Run Code Online (Sandbox Code Playgroud)

所以问题是:

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

mar*_*c_s 5

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

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

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

  • 最大类型的SqlClient大小为"-1".框架将其理解为"最大"类型. (3认同)

Waq*_*aja 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 而不是 bin

数据库.AddOutParameter(命令, "vbCertificate", DbType.Binary, 8000);

数据库.AddOutParameter(命令, "vbCertificate", SqlDbType.VarBinary, int.MaxValue);