返回首页

您好所有,我在C#Windows应用程序的工作。我的问题是同时运行的应用程序水晶报表不开放时,我数据库大小increses的......否则,它的工作原理罚款......这个问题不会发生在Visual Studio 2005 ..但我使用VS 2010 ..确切的问题是似乎设置不正确的水晶报表数据源的数据集的数据,所以请人帮我......

这是我的代码

private void LoadUserReport()

        {

            try

            {

                

                ParameterFields _objParamFields = new ParameterFields();

                ParameterField _objParamField;

                ParameterDiscreteValue _objParamDiscreteValue;

                DataTable _dt = new DataTable();

                DataSet _ds1 = new DataSet();

                

                int iColumnNo = 0;

                for (int i = 0; i < _dsReport.Tables[0].Columns.Count; i++)

                {

                    string sColhead = _dsReport.Tables[0].Columns[i].ColumnName.Trim();

                    _dt.Columns.Add(sColhead);

                    userDS.Tables[0].Columns[i].AllowDBNull = true;

                }

 

                for (int i = 0; i < _dsReport.Tables[0].Rows.Count; i++)

                {

                    _dt.Rows.Add();

                    userDS.Tables[0].Rows.Add();

                    for (int k1 = 0; k1 < _dsReport.Tables[0].Columns.Count; k1++)

                    {

                        if (_dsReport.Tables[0].Rows[i][k1].ToString() != null)

                        {

                            _dt.Rows[i][k1] = _dsReport.Tables[0].Rows[i][k1].ToString();

                            userDS.userreport.Columns[k1].MaxLength = 1000;

                            string sStrValue = _dt.Rows[i][k1].ToString();

                            if (sStrValue != null)

                            {

                                userDS.userreport[i][k1] = sStrValue;

                            }

                        }

                    }

                }

 

                _ds1.Tables.Add(_dt);

                for (int i = 0; i < _dsReport.Tables[0].Columns.Count; i++)

                {

                    string colCaption = _dsReport.Tables[0].Columns[i].Caption.Trim();

                    _ds1.Tables[0].Columns[i].Caption = colCaption;

                }

                for (int k = 0; k < _ds1.Tables[0].Rows.Count; k++)

                {

                    for (int j = iColumnNo; j < _ds1.Tables[0].Columns.Count; j++)

                    {

                        iColumnNo++;

                        _objParamField = new ParameterField();

                        _objParamField.Name = "col" + iColumnNo;

                        _objParamDiscreteValue = new ParameterDiscreteValue();

                        if (_ds1.Tables[0].Rows[k][j].ToString() != null)

                        {

                            _objParamDiscreteValue.Value = _ds1.Tables[0].Columns[j].Caption.Trim();

                        }

                        _objParamField.CurrentValues.Add(_objParamDiscreteValue);

                        _objParamFields.Add(_objParamField);

                    }

                }

                for (int j = iColumnNo; j < 10; j++)

                {

                    iColumnNo++;

                    _objParamField = new ParameterField();

                    _objParamField.Name = "col" + iColumnNo;

                    _objParamDiscreteValue = new ParameterDiscreteValue();

                    _objParamDiscreteValue.Value = "";

                    _objParamField.CurrentValues.Add(_objParamDiscreteValue);

                    _objParamFields.Add(_objParamField);

                }

                

 

                crystalReportViewer1.ParameterFieldInfo = _objParamFields;                

                _objUserReport.SetDataSource(userDS);                   //here problem occur it seems

                             

 

                if (_sRptTitle.Trim().Length > 0)

                {

                    _objUserReport.SetParameterValue("Title", _sRptTitle.Trim() + "\t Report");

                }

                else

                {

                    _objUserReport.SetParameterValue("Title", "User Report");

                }

                if (_sLocationName != null)

                    _objUserReport.SetParameterValue("LocationName", _sLocationName.Trim());

                _objUserReport.SetParameterValue("Head1", _sEventHead1.Trim());

                _objUserReport.SetParameterValue("Head2", _sEventHead3.Trim());

                _objUserReport.SetParameterValue("Head3", _sEventHead4.Trim());

                Text = _sNewcon1;// "User Report";

                _objUserReport.SetParameterValue("Title", _sNewcon1);               

                

                crystalReportViewer1.ReportSource = _objUserReport;

                

            }

            catch (EngineException engex)

            {

                MessageBox.Show(engex.Message, _sMsgboxTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

        }

回答

评论会员:ChandraRam 时间:2012/02/04
你检查报告,实际上已经完成从您的数据库的数据访问,当你有超过10000行吗?在报告中的状态栏的左侧面板中,您可以验证。如果它继续说,"访问数据库",检查报告的SQL查询确定您的数据库直接运行。它是在所有的可能性,需要重新设计你的数据库的情况下,包括指标(指数)
评论会员:thatraja 时间:2012/02/04
我认为超时发生在你的数据库的一面,因为更多的记录,所以你应该优化在数据库端的东西。临时增加数据库连接超时。

另一种方法是更改​​推模型的报告,但我认为这是不可能的,因为你需要重新设计所有的报告