SqlDbType映射到varBinary(max)的是什么?

时间:2011-04-28 20:33:40

标签: c# asp.net sql-server types

SqlDbType映射到varBinary(max)的是什么? SqlDbType.VarBinary说它限制在8K。 SQL Server文档说varbinary(max)可以存储aprrox。 2GB。但是SqlDbType.VarBinary说它限制在8K。

3 个答案:

答案 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的东西都会破坏它。