我正在尝试将图像从fileupload控件保存到数据库中
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数据类型的大小限制。
请提出一些解决方案
答案 0 :(得分:7)
这是MSDN on binary and varbinary的引用:
可变长度二进制数据。你可以 1到8,000之间的值。最大 表示最大存储空间 大小是2 ^ 31-1个字节。存储大小 是数据的实际长度 输入+ 2个字节。数据是 输入的长度可以是0个字节。该 varbinary的ANSI SQL同义词是 二元变化。
varbinary(MAX)
可以保存大小约为2GB的图像。
解决您的问题:
您忘记在代码中指定类型。您需要设置正确的SqlDbType。
e.Command.Parameters["@project_file"].SqlDbType = SqlDbType.VarBinary
我还应该做些什么,我设置了正确的Size。
答案 1 :(得分:1)
问题是sql server将参数类型指定为“SQL_Variant”。
尝试协助DbType:
e.Command.Parameters["@project_file"].SqlDbType = SqlDbType.Image
e.Command.Parameters["@project_file"].Value = bytes;
答案 2 :(得分:0)
不要在C#程序中使用SQL_VARIANT作为数据类型。请改用以下类型:
Dim binaryStream As SqlBinary
请参阅http://msdn.microsoft.com/en-us/library/a1904w6t(VS.80).aspx
P.S。当你使用Image和Blob的数据类型时,你会杀死一只小猫。不推荐使用这些数据类型,并且不再存储varbinary(MAX)。
关于使用Image vs Varbinary(max)的附注:
图像 从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同义词是二进制变量。