我的存储过程包含OUTPUT
类型的varbinary(MAX)
参数:
ALTER PROCEDURE [dbo].[StoredProcedure1]
...
@FileData varbinary(MAX) OUTPUT
AS
...
我不知道返回数据的实际大小是多少,因此我无法为size
构造函数的SqlParameter
参数使用精确值。另一方面,实际尺寸可能超过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()
行上收到以下异常:
附加信息:字节[] [0]:Size属性无效 大小为0。
所以我需要指定size
。有人建议将-1
作为大小的值传递:
var fileDataParameter = new SqlParameter("@FileData", SqlDbType.VarBinary, -1)
{ Direction = ParameterDirection.Output };
但我无法在MSDN page或其他任何地方找到对此事情的可靠描述。
就我而言,@FileData
参数中返回的最大数据大小不超过10 Mb。
所以问题是如果将-1
作为SqlParameter
映射到varbinary(MAX) OUTPUT
参数的大小传递给<script>
// open popup window "dialog"
$(function() {
$( "#dialog" ).dialog({
autoOpen: false ,
width: 1000,
buttons: {
"Quelle hinzufügen": function() {
var out = [document.getElementById("titelin"),document.getElementById("autorin"),document.getElementById("tagsin"),document.getElementById("linkin")];
var outv = [out[0].value,out[1].value,out[2].value,out[3].value];
ajax(outv);
},
Abbrechen: function() {
$( this ).dialog( "close" );
}
}
});
$( "#opener" ).click(function(e) {
e.preventDefault();
$( "#dialog" ).dialog("open");
});
});
// posting to PHP
function ajax(outv){
$.ajax({
type:"POST",
url:"quellenverzeichnis.php",
data: {output: outv},
sucess: function(){
alert("works");
},
error: function(){
alert("fail");
}
});
};
</script>
参数是正确的方法,例如,来自绩效观点?
答案 0 :(得分:2)
这是MSDN文档。 https://msdn.microsoft.com/en-us/library/bb399384.aspx - 参见&#34;使用大值类型参数&#34;节
传递&#34; -1&#34;对于&#34; MAX&#34;是正确的方法。价值大小。由于它是一个VarChar,它不会添加或返回任何额外的字符,只有您在该列中设置的字符。所以它应该非常有效。