【问题标题】:Can't insert inkPicture into SQL Server database from C#无法从 C# 将 inkPicture 插入 SQL Server 数据库
【发布时间】:2016-10-18 06:14:09
【问题描述】:

实际上,我正在开发一个 Windows 应用程序,我想添加 inkPicture 以将用户签名捕获到数据库中。签名列数据类型为varbinary。问题是该记录已添加到数据库中,但仅显示为空。

这是我到目前为止所做的:

string con = "Data Source=SAIUNIFLOW;Initial Catalog=documentfollowup;Integrated Security=True";

byte[] saveInk = (byte[])axInkPicture1.Ink.Save(InkPersistenceFormat.IPF_GIF, InkPersistenceCompressionMode.IPCM_Default);

cmdDatabase = new SqlCommand();
cmdDatabase.Connection = conDatabase;

//  cmdDatabase.CommandText = "insert into manage (Signature) values(Singature); "; 
cmdDatabase.CommandText= "insert into manage (Signature)" + "values('" +  axInkPicture1 + "'); ";

cmdDatabase.Parameters.AddWithValue("@Signature", saveInk);

我正在使用平板电脑获取签名,但是当我单击插入按钮时,我收到了该错误:

无法将空值插入列签名,表没有 允许空值。

希望能帮我解决这个错误。

【问题讨论】:

  • 文件必须进入文件存储,而不是 DB。
  • 我想直接将其添加到数据库中以供将来参考,而不是将其保存在特定存储中然后再次上传
  • 您应该查看Can we stop using AddWithValue() already? 并停止使用.AddWithValue() - 它可能会导致意想不到和令人惊讶的结果...
  • 我尝试使用 cmdDatabase.Parameters.Add(new SqlParameter("@Signature", System.Data.SqlDbType.VarBinary).Value = saveInk);
  • 但它抛出异常,上面写着“sqlParameterCollection 只接受非空 sqlParameter,而不是 Byte[] 对象

标签: c# sql-server winforms


【解决方案1】:

问题是你没有设置@Signature参数的值。并尝试设置参数的SqlDbType 属性。

改用这个:

cmdDatabase.CommandText= "insert into manage (Signature) values(@Signature);";
var signatureParam = cmdDatabase.Parameters.AddWithValue("@Signature", saveInk);
signatureParam.SqlDbType = SqlDbType.VarBinary;

【讨论】:

  • 谢谢你的回复。其实我已经试过了,但同样的错误
  • @Saif,你检查过saveInk 参数的值和cmdDatabaseParameters 集合吗?也许某处有一个null 值溜进来。
  • 是的,我检查过,一切似乎都正确。我尝试了很多方法来纠正这个问题,但没有奏效
  • 能否打开 Sql Server Profiler 看看对数据库执行了什么操作?
  • 你的意思是使用sql server profiler来跟踪数据库吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多