2013-03-26 35 views
0

获取错误:System.argumentexception:不存在从对象类型system.io.memorystream到已知托管提供程序本机的映射类型。从对象类型system.io.memorystream到已知托管提供程序本机类型不存在映射,仅Windows XP版本

我的代码在Win7-64bit上正常工作,但在WinXP-64bit上不能正常工作。

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

回答

1

最有可能不能处理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); 

} 
+0

该诀窍,仍然不知道为什么这只是一个XP机器问题。 – mjrevel 2013-03-26 19:30:18

+0

@mjrevel对不起,我无法回答你的问题:/ – Lloyd 2013-03-26 21:10:52

相关问题