sql_variant的大小限制超出

时间:2011-07-05 11:13:56

标签: c# asp.net sql visual-studio

我正在尝试将图像从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数据类型的大小限制。

请提出一些解决方案

3 个答案:

答案 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同义词是二进制变量。