vs2005 自带水晶报表设计时的数据库连接是存储过程 在运行时 出现未提供参数的错误
代码:
private void InitialzeReport()
{
this.rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
this.rpt.Load(AppDomain.CurrentDomain.BaseDirectory + "Report\\rptBomMingXi.rpt");
this.rpt.SetParameterValue("@ProductID", "");
TableLogOnInfo logOnInfo = new TableLogOnInfo();
string strDataBase = System.Configuration.ConfigurationSettings.AppSettings.Get("Database");
string strServer = System.Configuration.ConfigurationSettings.AppSettings.Get("Server");
string strPassWord = System.Configuration.ConfigurationSettings.AppSettings.Get("PassWord");
string strUser = System.Configuration.ConfigurationSettings.AppSettings.Get("User");
logOnInfo = this.rpt.Database.Tables[0].LogOnInfo;
logOnInfo.ConnectionInfo.DatabaseName = strDataBase;
logOnInfo.ConnectionInfo.ServerName = strServer;
logOnInfo.ConnectionInfo.Password = strPassWord;
logOnInfo.ConnectionInfo.UserID = strUser;
this.rpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
ParameterFields mParameterFields = new ParameterFields();
ParameterField mParameterField = new ParameterField();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue();
ParameterRangeValue rangeVal = new ParameterRangeValue();
mParameterField.ParameterFieldName = "@ProductID";
discreteVal.Value = "";
mParameterField.CurrentValues.Add(discreteVal);
mParameterFields.Add(mParameterField);
this.crystalReportViewer1.ParameterFieldInfo = mParameterFields;
DataSet ds = new BUReportBomMingXi().GetBomList("");
this.rpt.SetDataSource(ds);
this.crystalReportViewer1.ReportSource = this.rpt;
}
窗体刚加载时 调用InitialzeReport()方法没有出现问题。
private void bsProduct_PositionChanged(object sender, EventArgs e)
{
if (this.bsProduct.Count == 0) return;
if (this.tabControl1.SelectedTab == this.tabPage2)
{
string productID = this.grwProduct.Rows[this.bsProduct.Position].Cells["grwcProductID"].Value.ToString();
this.rpt.SetParameterValue("@ProductID", productID);
DataSet ds = new BUReportBomMingXi().GetBomList(productID);
this.rpt.SetDataSource(ds);
this.crystalReportViewer1.ReportSource = this.rpt;
}
}
触发这个事件就出问题了。
如下:
打开行集失败。
详细资料:ADO Error Code:0x
Source:Microsoft OLE DB Provider For SQL Server
Description:过程'ProBomMingXi'需要参数'@ProductID',但未提供该参数。
SQL State:4200
Native Error:打开行集失败。
文件C:\Docume~\Lindon\Locals~1\Temp\rptBomMingXi{是GUID}.rpt内出错:
未能打开行集。