SqlDbType映射到varBinary(max)的是什么? SqlDbType.VarBinary说它限制在8K。 SQL Server文档说varbinary(max)可以存储aprrox。 2GB。但是SqlDbType.VarBinary说它限制在8K。
答案 0 :(得分:24)
长度为-1的SqlDbType.VarBinary等价于VARBINARY(MAX),至少在理论上是这样。但问题有点复杂,因为还有一种类型(不是枚举值),即SqlTypes.SqlBytes
可以使用。当VARBINARY(MAX)
类型具有FILESTREAM
属性时,SqlTypes.SqlFileStream
也可用于VARBINARY(MAX)
类型。
但问题是这些枚举或类型都没有涵盖在ADO.Net中使用VARBINARY(MAX)
列的真正问题:内存消耗。所有这些类型,当使用“开箱即用”时,将创建在内存中分配为单个数组的值的副本,这最多是无法执行的,但随着内容变得越来越大,因为分配失败而无法使用。我有几篇文章展示了使用流语义处理ADO.Net中{{1}}值的正确方法,避免创建整个内容的内存中副本:
答案 1 :(得分:5)
试试这个:
SqlParameter blobParam = new SqlParameter("@blob", SqlDbType.VarBinary, buffer.Length);
blobParam.Value = buffer;
cmd.Parameters.Add(blobParam);
看看是否有效
答案 2 :(得分:0)
这可能会有所帮助:http://msdn.microsoft.com/en-us/library/a1904w6t.aspx
尽管可能很难看,但SqlDbType.Image似乎是要走的路。看起来我需要更新我的ORM,因为任何超过8k的东西都会破坏它。