0

出现错误:System.argumentexception:不存在从对象类型 system.io.memorystream 到已知托管提供程序本机类型的映射。

我的代码在 Win7-64bit 上运行良好,但在 WinXP-64bit 上不行。

当 KeyValuePair 中传递的 Object 是 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);
4

1 回答 1

1

很可能它无法处理Stream课程。您可以尝试使用byte[]它,它MemoryStream可以让您轻松做到:

pdfDictionary.Add(PARAMS.PDF, mStream.ToArray());

您可能还希望将流包装在 ausing() {}中以防止泄漏:

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);

}
于 2013-03-26T19:20:33.773 回答