不存在从对象类型system.io.memorystream到已知托管提供程序本机类型的映射,仅适用于Windows X
本文关键字:类型 本机 程序 映射 Windows 适用于 io system 对象 memorystream 不存在 | 更新日期: 2023-09-27 18:06:04
获取错误:System。参数异常:不存在从对象类型system.io.memorystream到已知托管提供商本机类型的映射。
我的代码在win7 -64位运行良好,但在winxp -64位运行不正常。
在KeyValuePair中传递的对象是Stream或MemoryStream类型,SQL不知道如何处理时发生错误。
下面是有问题的代码:
foreach (KeyValuePair<frmMain.PARAMS, Object> item in paramDictionary)
{
sqlCMD.Parameters.Add(new SqlParameter("@" + item.Key.ToString(), item.Value));
}
作为参考,下面是调用的代码:
mStream = frmRptViewer.CryRpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
Dictionary<PARAMS, Object> pdfDictionary = new Dictionary<PARAMS, Object>();
pdfDictionary.Add(PARAMS.TYPE, "PDFSAVE");
pdfDictionary.Add(PARAMS.PDF, mStream);
pdfDictionary.Add(PARAMS.JOBNUMB, jobNumTextBox.Text);
pdfDictionary.Add(PARAMS.LINENUMB, lineNumTextBox.Text);
DBCall.SavePDF(pdfDictionary);
很可能无法处理Stream
类。您可以尝试使用byte[]
,而MemoryStream
可以让您轻松完成:
pdfDictionary.Add(PARAMS.PDF, mStream.ToArray());
您可能还想将流包装在using() {}
中以防止泄漏:
using (MemoryStream mStream = frmRptViewer.CryRpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)) {
Dictionary<PARAMS, Object> pdfDictionary = new Dictionary<PARAMS, Object>();
pdfDictionary.Add(PARAMS.TYPE, "PDFSAVE");
pdfDictionary.Add(PARAMS.PDF, mStream);
pdfDictionary.Add(PARAMS.JOBNUMB, jobNumTextBox.Text);
pdfDictionary.Add(PARAMS.LINENUMB, lineNumTextBox.Text);
DBCall.SavePDF(pdfDictionary);
}