2011-04-28 154 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

相關問題