【问题标题】:size limit for the sql_variant exceedssql_variant 的大小限制超过
【发布时间】:2011-09-28 17:35:07
【问题描述】:

我正在尝试将图像从文件上传控件保存到数据库中

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 数据类型的大小限制。

请提出一些解决方案

【问题讨论】:

  • 您缩进代码的方式是……很有创意。 ;-)

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


【解决方案1】:

这是MSDN on binary and varbinary的引述:

可变长度二进制数据。 n 可以是 一个从 1 到 8,000 的值。最大限度 表示最大存储 大小为 2^31-1 字节。存储大小 是数据的实际长度 输入 + 2 个字节。数据是 输入的长度可以是 0 字节。这 varbinary 的 ANSI SQL 同义词是 二进制变量。

varbinary(MAX) 可以容纳大约 2GB 大小的图像。

您的问题的解决方案:

您忘记在代码中指定类型。您需要设置正确的SqlDbType

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

你还应该做什么我设置正确的Size

【讨论】:

  • 如果投反对票的人可以在我说的有问题时发表评论,我们将不胜感激。
  • 这对我有用:((SqlParameter)e.Command.Parameters["@FileData"]).SqlDbType = SqlDbType.VarBinary;
【解决方案2】:

问题是sql server将参数的类型分配为“SQL_Variant”。

尝试分配 DbType :

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

【讨论】:

  • 它解决了我的问题,谢谢。但是我没有得到背后的概念。为什么在数据库中设置类型后我们必须再次设置数据库类型??
  • @saurabh,您的代码不知道您发送到数据库的数据类型。所以它将做的是将其推广到 sql_variant 并且数据库期望二进制数据(varbinary/blob/image)。
  • @saurabh :Filip 的答案正是您的代码所发生的情况。
【解决方案3】:

不要在 C# 程序中使用 SQL_VARIANT 作为数据类型。请改用以下类型:

Dim binaryStream As SqlBinary

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

附:当您使用 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 同义词是二进制变量。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-06-08
  • 2014-07-24
  • 2012-10-25
  • 2019-03-14
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多