2013-03-26 47 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

相關問題