如何在varbinary中存储16000个字节

时间:2014-11-24 21:54:39

标签: c# sql-server

我有一个允许电子签名的网络应用程序。当我获得签名时,它是确切的大小(大多数大于8000字节)。但是当它进入数据库时​​,它会一直被截断为8000字节。 当我检查varbinary时,它表示如果字节数组大于8,000字节,则隐式转换失败。使用大于8,000字节的字节数组时,显式设置对象。 我在以下场景中如何做到这一点?我不想丢失任何字节。

public DataSet InsertInformation(FormInformation info)
{
    SqlCommand command = new SqlCommand("SPInsertSig");
    command.Parameters.Add("@Signature", SqlDbType.VarBinary).Value = info.Signature; 
    DataSet resultDataSet;
    resultDataSet = ExecuteStoreProcedure(command);
    return resultDataSet;
}

当我用Google搜索时,有人提到尝试这种方式,但它也不起作用,并将值截断为8000字节。

SqlParameter param = command.Parameters.Add("@Signature", SqlDbType.VarBinary);
param.Value = info.Signature;
param.Size = -1;

任何建议都会非常感激。 感谢

更新 将其更改为Int32.MaxValue后,它可以正常工作。

2 个答案:

答案 0 :(得分:2)

尝试使用新的SqlParemeter c' tor:

SqlParameter(String, SqlDbType, Int32)

或在你的情况下:

command.Parameters.Add(new SqlParameter("@Signature", SqlDbType.VarBinary, -1)).Value = info.Signature; 

答案 1 :(得分:1)

由于问题缺乏深度,没有人可以明确地给出答案,因此您确实需要按照清单来确定问题。这是你应该检查的顺序;最常见的原因,在我的经验中最不常见。由于你所看到的消息,我打赌#4是罪魁祸首。

  1. 表格中的字段是否声明为varbinary(max)
  2. 代码中的SQL参数是否正确(即.size=-1)?
  3. 被调用的存储过程是否在参数声明中正确调整了字段大小?
  4. 是否有CASTCONVERT来电指定VARBINARY,但存储过程中的大小不正确?
  5. 表上是否有触发器将数据备份复制到另一个表?如果是这样,该表的大小是否正确?此外,如果有触发器,是否有CASTCONVERT调用指定VARBINARY,但存储过程中的大小不正确?
  6. 存储过程中是否有任何地方将原始值复制到另一个变量中并且该变量的大小不正确?
  7. 是否存在针对可能被错误声明的字段编入索引的视图?