问题描述
我正在尝试将 pdf PdfDocument doc
插入包含扫描文档的数据库中。当我尝试添加它时,我收到下一条消息错误:
System.Data.sqlClient.sqlException: '不允许从 nvarchar 类型到 varbinary(max) 类型的隐式转换。使用函数 CONVERT 执行此查询。'
我使用的是 Visual Studio 2019 和 sql Server 2012。
sqlCommand add = new sqlCommand("UPDATE table SET documento = @documento WHERE p = @contentP AND n = @contentN;",con);
add.Parameters.AddWithValue("@documento",Convert.ToString(doc));
add.Parameters.AddWithValue("@contentP",contentP);
add.Parameters.AddWithValue("@contentN",contentN);
con.open();
add.ExecuteNonQuery();
con.Close();
解决方法
System.Data.SqlClient.SqlException: '不允许从 nvarchar 类型到 varbinary(max) 类型的隐式转换。使用函数 CONVERT 执行此查询。'
您的问题是因为您试图通过执行 NVARCHAR
将 VARBINARY(MAX)
挤入 Convert.ToString(doc)
列。您必须获得一个 byte[]
并将其用作您的参数值
要修复此错误,您需要将 PdfSharp.Pdf.PdfDocument
保存到 MemoryStream
,然后从流中获取 byte[]
,请参见下文。
MemoryStream stream = new MemoryStream();
doc.Save(stream,false);
byte[] bytes = stream.ToArray();
现在您可以使用 bytes
作为您的 documento
参数值。