2011-04-28 148 views

回答

21

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

但问题是,这些枚举或类型都没有涉及与ADO.Net中的VARBINARY(MAX)列一起使用的实际问题:内存消耗。所有这些类型,如果使用“即装即用”,将在内存中创建作为单个数组分配的值的副本,这最多是不可用的,但随着内容变得越来越大,变得不可用,因为分配失败。我有一对夫妇,显示使用流语义避免在内存中的全部内容拷贝的创作ADO.Net处理VARBINARY(MAX)值的正确方法文章:

+1

我用-1,它工作正常 – Abacus 2013-06-06 16:49:36

+0

真奇怪的是,上述没有为我工作。我必须写:dtProducts.Columns.Add(new DataColumn(“Cover”,typeof(byte [])){AllowDBNull = true});注意字节[] ...这是为我工作。 – Johan 2013-10-29 07:22:54

5

试试这个:

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

看看是否能工程

+1

感谢您的回复,我解决了它。 – jams 2011-04-28 21:24:53

+1

什么是解决方案,只是出于好奇? – dmg 2011-04-28 21:25:47

+1

“缓冲区”的类型是什么? – 2011-04-29 02:15:57

相关问题