使用 -1 作为输出 SqlParameter 的大小来检索 VARBINARY(max) 值是否正确?
Is it correct to use -1 as a size for an output SqlParameter to retrieve a VARBINARY(max) value?
我有一个带有 varbinary(MAX)
类型的 OUTPUT
参数的存储过程:
ALTER PROCEDURE [dbo].[StoredProcedure1]
...
@FileData varbinary(MAX) OUTPUT
AS
...
我不知道返回数据的实际大小是多少,所以我不能为 SqlParameter
构造函数的 size
参数使用精确值。另一方面,实际大小可能超过 8 Kb(如果重要的话)。
当我创建 SqlParameter
而不声明尺寸时:
var fileDataParameter = new SqlParameter("@FileData", SqlDbType.VarBinary)
{ Direction = ParameterDirection.Output };
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(fileDataParameter);
command.ExecuteNonQuery();
var fileData = fileDataParameter.Value as byte[];
我在 command.ExecuteNonQuery()
行收到以下异常:
Additional information: Byte[][0]: the Size property has an invalid
size of 0.
所以我需要指定size
。有人建议将 -1
作为大小的值传递:
var fileDataParameter = new SqlParameter("@FileData", SqlDbType.VarBinary, -1)
{ Direction = ParameterDirection.Output };
但是我在 MSDN page 和其他任何地方都找不到关于这个东西的可靠描述。
在我的例子中,@FileData
参数中返回的最大数据大小不超过 10 Mb。
所以问题是 如果将 -1
作为大小传递给映射到 varbinary(MAX) OUTPUT
参数的 SqlParameter
是正确的方法,例如,从性能角度?
这是 MSDN 文档。
https://msdn.microsoft.com/en-us/library/bb399384.aspx
- 请参阅 "Using Large Value Type Parameters" 部分
传递“-1”是 "MAX" 值大小的正确方法。因为它是一个 VarChar,所以它不会添加 add 或 return 任何额外的字符,只会添加您在该列中设置的字符。所以应该效率很高。
我有一个带有 varbinary(MAX)
类型的 OUTPUT
参数的存储过程:
ALTER PROCEDURE [dbo].[StoredProcedure1]
...
@FileData varbinary(MAX) OUTPUT
AS
...
我不知道返回数据的实际大小是多少,所以我不能为 SqlParameter
构造函数的 size
参数使用精确值。另一方面,实际大小可能超过 8 Kb(如果重要的话)。
当我创建 SqlParameter
而不声明尺寸时:
var fileDataParameter = new SqlParameter("@FileData", SqlDbType.VarBinary)
{ Direction = ParameterDirection.Output };
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(fileDataParameter);
command.ExecuteNonQuery();
var fileData = fileDataParameter.Value as byte[];
我在 command.ExecuteNonQuery()
行收到以下异常:
Additional information: Byte[][0]: the Size property has an invalid size of 0.
所以我需要指定size
。有人建议将 -1
作为大小的值传递:
var fileDataParameter = new SqlParameter("@FileData", SqlDbType.VarBinary, -1)
{ Direction = ParameterDirection.Output };
但是我在 MSDN page 和其他任何地方都找不到关于这个东西的可靠描述。
在我的例子中,@FileData
参数中返回的最大数据大小不超过 10 Mb。
所以问题是 如果将 -1
作为大小传递给映射到 varbinary(MAX) OUTPUT
参数的 SqlParameter
是正确的方法,例如,从性能角度?
这是 MSDN 文档。 https://msdn.microsoft.com/en-us/library/bb399384.aspx - 请参阅 "Using Large Value Type Parameters" 部分
传递“-1”是 "MAX" 值大小的正确方法。因为它是一个 VarChar,所以它不会添加 add 或 return 任何额外的字符,只会添加您在该列中设置的字符。所以应该效率很高。