不存在从对象类型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);

不存在从对象类型system.io.memorystream到已知托管提供程序本机类型的映射,仅适用于Windows X

很可能无法处理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);
}
相关文章: