从我的c#代码调用存储过程的问题

时间:2011-08-13 03:59:17

标签: c# sql enterprise-library

我想从我的代码中运行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表单调用此方法时,每件事情都可以。 有什么问题?

1 个答案:

答案 0 :(得分:0)

我认为您可能需要在设置之前添加参数:

foreach param ... {    DatabaseManager.Database.AddInParameter(paramCommand,<name><DbType>);

DatabaseManager.Database.SetParameterValue(paramCommand,parameter.Key,parameter.Value);

}