0

エラーの取得:System.argumentexception:オブジェクトタイプ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);
4

1 に答える 1

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

}
于 2013-03-26T19:20:33.773 に答える