我想从我的代码中运行sp。 sp名称存储在db中。我通过字典传递参数。这段代码是我在Windows服务中托管的wcf服务方法之一。我的代码是:
private DataSet RunReport(int id, ParameterDictionary parametersDic)
{
DataSet result = new DataSet();
try
{
DataSet report = GetReportDataset(id);
if (report.Tables[0].Rows.Count > 0)
{
string reportType = GetReportTypeDataset(Convert.ToInt32(report.Tables[0].Rows[0]["ReportTypeID"]));
if (reportType != ReportType.StoredProcedure.ToString())
{
throw new Exception("your report is not a sp report.");
}
using (DbCommand paramCommand = DatabaseManager.Database.GetStoredProcCommand(report.Tables[0].Rows[0]["SQLQuery"].ToString()))
{
foreach (var parameter in parametersDic)
{
DatabaseManager.Database.SetParameterValue(paramCommand, parameter.Key, parameter.Value);
}
result = DatabaseManager.Database.ExecuteDataSet(paramCommand);
result.AcceptChanges();
}
}
}
catch (Exception ex)
{
throw ex;
}
return result;
}
当我运行此代码时,会产生以下错误:
此参数不包含带有ParameterName'ID'的SqlParameter SqlParameterCollection。
另外,当我通过win表单调用此方法时,每件事情都可以。 有什么问题?
答案 0 :(得分:0)
我认为您可能需要在设置之前添加参数:
foreach param ...
{
DatabaseManager.Database.AddInParameter(paramCommand,<name>
,<DbType>
);
DatabaseManager.Database.SetParameterValue(paramCommand,parameter.Key,parameter.Value);
}