将扫描的pdf插入数据库c#

问题描述

我正在尝试将 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 执行此查询。'

您的问题是因为您试图通过执行 NVARCHARVARBINARY(MAX) 挤入 Convert.ToString(doc) 列。您必须获得一个 byte[] 并将其用作您的参数值

要修复此错误,您需要将 PdfSharp.Pdf.PdfDocument 保存到 MemoryStream,然后从流中获取 byte[],请参见下文。

 MemoryStream stream = new MemoryStream(); 
 doc.Save(stream,false); 
 byte[] bytes = stream.ToArray();

现在您可以使用 bytes 作为您的 documento 参数值。