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

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

长度为-1的SqlDbType.VarBinary等价于VARBINARY(MAX),至少在理论上是这样。 但问题有点复杂,因为还有一个类型(不是枚举值),即可以使用的SqlTypes.SqlBytes 。 还有SqlTypes.SqlFileStream ,当它们具有FILESTREAM属性时,它也可以用于VARBINARY(MAX)类型。

但问题是这些枚举或类型都没有涵盖在ADO.Net中使用VARBINARY(MAX)列的实际问题:内存消耗。 所有这些类型,当使用“开箱即用”时,将创建在内存中作为单个数组分配的值的副本,这最多是无法执行的,但随着内容变得越来越大,因为分配失败而无法使用。 我有几篇文章展示了使用流语义处理ADO.Net中的VARBINARY(MAX)值的正确方法,避免了创建整个内容的内存中副本:

  • 通过ASP.Net MVC从SQL Server下载和上载图像
  • FILESTREAM MVC:从SQL Server下载和上传图像

试试这个:

 SqlParameter blobParam = new SqlParameter("@blob", SqlDbType.VarBinary, buffer.Length); blobParam.Value = buffer; cmd.Parameters.Add(blobParam); 

看看是否有效

这可能会有所帮助: http : //msdn.microsoft.com/en-us/library/a1904w6t.aspx

虽然它可能很难看,但SqlDbType.Image似乎是要走的路。 看起来我需要更新我的ORM,因为任何超过8k的东西都会破坏它。