对象类型系统中不存在映射。\uuu ComObject到已知的托管提供程序本机类型。c#

对象类型系统中不存在映射。\uuu ComObject到已知的托管提供程序本机类型。c#,c#,sql,sql-server,C#,Sql,Sql Server,我想将pdf文件从扫描仪上载到数据库(SQL Server),但收到错误消息: System.ArgumentException:'不存在从对象类型System.\u ComObject到已知托管提供程序本机类型的映射。' 我正在使用VisualStudio2019 这是我的代码: escaneRDesponsible=manejadorddisp.deviceInfo[i]; Device dispositivo=escanerDisponsible.Connect(); 项目objetoEs

我想将pdf文件从扫描仪上载到数据库(SQL Server),但收到错误消息:

System.ArgumentException:'不存在从对象类型System.\u ComObject到已知托管提供程序本机类型的映射。'

我正在使用VisualStudio2019

这是我的代码:

escaneRDesponsible=manejadorddisp.deviceInfo[i];
Device dispositivo=escanerDisponsible.Connect();
项目objetoEscaneado=处置项目[1];
Escaner.AjustesScaner(对象扫描起始、分辨率、0、0、宽度、高度、0、0、颜色);
con.Open();
SqlCommand inserta=new SqlCommand(“更新INSPECCIONESTIONDOCUMENTAL SET NUMEOINSPECCION=NUMEOINSPECCION,NUMEROPROPESTA=NUMEROPROPESTA,placa=placa,documento=@documento,其中placa=”“+tNumeroPlaca.Text+””和NUMEROPROPESTA=“+TNUMERPROPUESTA.Text+”;”,con);
inserta.Parameters.AddWithValue(“@documento”,objetoEscaneado);
SqlParameter addDocumento=新的SqlParameter(“@documento”,objetoEscaneado);
addDocumento.Direction=参数Direction.Output;
inserta.ExecuteReader();
MemoryStream ms=新的MemoryStream();
inserta.ExecuteReader().Read();
var bytes=新字节[(inserta.ExecuteReader().GetBytes(0,0,null,0,int.MaxValue))];
inserta.ExecuteReader().GetBytes(0,0,bytes,0,bytes.Length);
ms.Write(字节,0,字节.长度);
MessageBox.Show(“Documento insertado”);
con.Close();
此处:

inserta.Parameters.AddWithValue("@documento", objetoEscaneado);
将类型为
Item
的对象作为参数添加到SQL中。ADO.NET不知道如何将
转换为SQL Server能够理解的数据类型(“已知的托管提供程序本机类型”),这就是您收到错误消息的原因

要解决此问题,请改用SQL Server能够理解的数据类型(例如,字符串或字节数组)。我不熟悉您使用的库,但很可能
Item
具有允许您以字节数组形式访问文档的属性或方法


哦,作为旁注:也请使用WHERE参数的参数,有关详细信息,请参见此问题:


请使用参数化查询-通过连接等方式构建SQL查询会导致灾难。它不仅是许多难以调试的语法错误的来源,也是一个广泛、开放的门户。我将Item对象作为字符串添加到SQL命令中,现在我没有收到错误消息,谢谢@卢西亚卡:你是怎么做到的?我不确定这是否符合您的期望。我刚刚注意到,我从扫描仪获取的pdf没有正确插入到数据库中,我只是知道error@luciacar:这正是我所怀疑的。您需要获取pdf的字节数组。为此,您需要检查
objetoEscaneado
(或扫描仪API的文档)的方法/属性。objetoEscaneado是我扫描的pdf,我将其保存为一个项目。