【问题标题】:Insert an scanned pdf into database c#将扫描的pdf插入数据库c#
【发布时间】:2021-07-19 15:04:31
【问题描述】:

我正在尝试将 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();

【问题讨论】:

  • 请使用参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的大门。
  • @zaggler doc 定义为PdfDocument,即来自nuget PdfSharp。现在我收到此错误:System.InvalidCastException:'无法将'PdfSharp.Pdf.PdfDocument'类型的对象转换为'System.IConvertible'类型。当我把Convert.ToByte(doc)
  • @zaggler 现在可以使用了,非常感谢

标签: c# database pdf sql-server-2012 visual-studio-2019


【解决方案1】:

System.Data.SqlClient.SqlException: '不允许从类型 nvarchar 到 varbinary(max) 的隐式转换。使用函数 CONVERT 来执行这个查询。'

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2021-08-27
    • 1970-01-01
    • 2019-12-12
    • 2016-02-05
    • 2015-05-25
    • 1970-01-01
    • 2017-10-02
    • 2011-06-20
    相关资源
    最近更新 更多