簡體   English   中英

sql_variant 的大小限制超過

[英]size limit for the sql_variant exceeds

我正在嘗試將文件上傳控件中的圖像保存到數據庫中

public Byte[] bytes;
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
bytes = br.ReadBytes((Int32)fs.Length);
SqlDataSource2.Update();

protected void SqlDataSource2_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
   e.Command.Parameters["@project_file"].Value = bytes;
}

我的數據庫project_file字段設置為varbinary(MAX)

但它拋出了一個錯誤

參數“@project_file”超出了 sql_variant 數據類型的大小限制。

請提出一些解決方案

這是MSDN 關於 binary 和 varbinary的引述:

可變長度二進制數據。 n 可以是 1 到 8,000 之間的值。 max 表示最大存儲大小為 2^31-1 字節。 存儲大小是輸入數據的實際長度 + 2 個字節。 輸入的數據長度可以是 0 字節。 varbinary 的 ANSI SQL 同義詞是二進制變化的。

varbinary(MAX)可以保存大小約為 2GB 的圖像。

解決您的問題:

您忘記在代碼中指定類型。 您需要設置正確的SqlDbType

e.Command.Parameters["@project_file"].SqlDbType = SqlDbType.VarBinary

你還應該做什么,我設置了正確的Size

問題是 sql 服務器將參數的類型分配為“SQL_Variant”。

嘗試評估 DbType:

e.Command.Parameters["@project_file"].SqlDbType = SqlDbType.Image
e.Command.Parameters["@project_file"].Value = bytes;

不要在 C# 程序中使用 SQL_VARIANT 作為數據類型。 請改用以下類型:

Dim binaryStream As SqlBinary

請參閱http://msdn.microsoft.com/en-us/library/a1904w6t(VS.80).aspx

PS 當您使用 Image 和 Blob 數據類型時,您會殺死一只小貓。 這些數據類型已被棄用,並且僅存儲 varbinary(MAX)。

關於使用 Image vs Varbinary(max) 的旁注:

image 從 0 到 2^31-1 (2,147,483,647) 字節的可變長度二進制數據。

varbinary [ ( n | max) ](最大存儲大小為 2^31-1 字節。)可變長度二進制數據。 n 可以是 1 到 8,000 之間的值。 max 表示最大存儲大小為 2^31-1 字節。 存儲大小是輸入數據的實際長度 + 2 個字節。 輸入的數據長度可以是 0 字節。 varbinary 的 ANSI SQL 同義詞是二進制變化的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM