首页 新闻 会员 周边 捐助

关于Vs2008水晶报表的问题。

0
[待解决问题]

我做了一个报表,连接数据集的。但是运行的时候老提示数据库登陆,而且填写好用户名和密码的后还登陆不上。怎么去掉登陆提示啊,我用的是oracle数据库。我从网上找的资料都试了,不好用。下面是我写的代码:

    protected void Page_Load(object sender, EventArgs e)
    {
             DataSet dr = DB.reDs("select * from JJ_BILL");//返回数据集
            TableLogOnInfo logOnInfo = new TableLogOnInfo();
            ReportDocument oRpt = new ReportDocument();
            string path1;
            path1 = Server.MapPath("CrystalReport.rpt");
            oRpt.Load(path1);
            oRpt.SetDataSource(dr);
            for (int i = 0; i == oRpt.Database.Tables.Count - 1; i++)
            {
            logOnInfo.ConnectionInfo.ServerName = "ORCL_wang.";
                logOnInfo.ConnectionInfo.DatabaseName = "";
                logOnInfo.ConnectionInfo.UserID = "GX_RLGL";
                logOnInfo.ConnectionInfo.Password = "ok";
                oRpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo);

            }
            CrystalReportViewer1.ReportSource = oRpt;

    }

 

还有就是预览的时候怎么传参数啊。

问题补充: 3.还有个问题我在网上看到读取配置文件的连接串是这样写的: string a, b, c, d; //获取ServerName a = System.Configuration.ConfigurationSettings.AppSettings["servername"]; //获取DatabaseName b = System.Configuration.ConfigurationSettings.AppSettings["DatabaseName"]; //获取UserId c = System.Configuration.ConfigurationSettings.AppSettings["userid"]; //获取password d = System.Configuration.ConfigurationSettings.AppSettings["pass"]; //设置logOnInfo参数 logOnInfo.ConnectionInfo.ServerName = a; logOnInfo.ConnectionInfo.DatabaseName = b; logOnInfo.ConnectionInfo.UserID = c; logOnInfo.ConnectionInfo.Password = d; oRpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo); 但是我的是oracle 数据库,我的配置文件连接写法如下: <connectionStrings> <add name="ConnectionString1" connectionString="Data Source=ORCL;Persist Security Info=True;User ID=gx_rlgl;Password=ok;Unicode=True" providerName="System.Data.OracleClient" /> </connectionStrings> 按照上面的方法读取都试null,请问我该这么写。
流浪蜗牛的主页 流浪蜗牛 | 初学一级 | 园豆:180
提问于:2010-08-13 12:01
< >
分享
所有回答(5)
0

DataSet dr = DB.reDs("select * from JJ_BILL");

你这里已经返回数据集了,为啥后面还要设置连接信息?

Launcher | 园豆:45050 (高人七级) | 2010-08-13 12:48
不设置连接信息会出现登陆框, for (int i = 0; i == oRpt.Database.Tables.Count - 1; i++) { logOnInfo.ConnectionInfo.ServerName = "ORCL_wang."; logOnInfo.ConnectionInfo.DatabaseName = ""; logOnInfo.ConnectionInfo.UserID = "GX_RLGL"; logOnInfo.ConnectionInfo.Password = "ok"; oRpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo); } 这一段是我在网上找的代码,作用就是取消登陆框,但不好用。
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-13 12:51
OracleConnection conn = new OracleConnection("Data Source=ORCL_wang;User ID=GX_RLGL;Password=ok;Unicode=True"); conn.Open(); OracleDataAdapter da = new OracleDataAdapter("select * from JJ_BILL",conn); DataSet ds =new DataSet(); da.Fill(ds,"JJ_BILL"); conn.Close(); oRpt.SetDataSource(ds); CrystalReportViewer1.ReportSource = oRpt; 这样不行吗?
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2010-08-13 13:11
这样可以,但是有一点不好,就是每次都要配置连接串,能从配置文件里直接读取吗
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-13 14:13
@流浪蜗牛:可以,从哪儿取都行,比如从web.config中取,如下: OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["RPT_DB_CONN"].ConnectionString); 然后在 web.config 中添加: <connectionStrings> <add name="RPT_DB_CONN" connectionString="Data Source=ORCL_wang;User ID=GX_RLGL;Password=ok;Unicode=True" providerName="System.Data.OracleClient" /> </connectionStrings> 当然,你也可以用别的方法来配置和获取连接字符串。
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2010-08-13 14:54
OracleConnectionStringBuilder connStrBuilder = new OracleConnectionStringBuilder(ConfigurationManager.ConnectionStrings["ConnectionString1"].ConnectionString); //设置logOnInfo参数 logOnInfo.ConnectionInfo.ServerName = connStrBuilder.DataSource; logOnInfo.ConnectionInfo.DatabaseName = connStrBuilder.DataSource; logOnInfo.ConnectionInfo.UserID = connStrBuilder.UserID; logOnInfo.ConnectionInfo.Password = connStrBuilder.Password; 有一点要注意,Oracle 中是没有 Database 这个概念的,可能需要填 null。
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2010-08-13 15:11
lz可以试试这位高人的连接方法。。。简单有效。。也无须去web.config,直接连接
支持(0) 反对(0) 发香已散 | 园豆:4 (初学一级) | 2010-08-13 16:35
按照大家说我预览第一页的时候好了,不提示登陆框了,但是点击下一页的时候又提示了,不止是下一页按钮,只要点击预览窗体上的按钮都会出现登录窗体,像导出按钮,打印按钮之类的。这是怎么回事。
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-13 18:14
@流浪蜗牛:你是用的asp.net吧!因为服务器不会保存你第一次连接的信息和数据,所以每次点击,都需要重新连接并读取数据。等我回头做个asp.net的页面测试下。
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2010-08-15 22:09
大侠有解决办法吗,我还没找到合适的方法,大家有遇到此类问题的吗
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-17 08:14
0

第一个问题:

  报表提示登录信息有个巧的办法就是 把数据集 也就是你的 dr.Tables[0].TableName="你查询的表的名字" 。  这样就不会提示登录信息了。

第二个问题:

  传参可以通过下面的代码来:

    ParameterFields pfs = new ParameterFields();
     
   var paramField = new ParameterField();
  var discreteVal = new ParameterDiscreteValue();
  paramField.ParameterFieldName = "报表参数名";
  discreteVal.Value = "参数值";
  paramField.CurrentValues.Add(discreteVal);
 this.pfs.Add(paramField);
 重复加多个参数 
  最后设置参数信息:
  CrystalReportViewer1.ParameterFieldInfo = pfs;
把你的代码改成:

             DataSet dr = DB.reDs("select * from JJ_BILL");//返回数据集
            TableLogOnInfo logOnInfo = new TableLogOnInfo();
            ReportDocument oRpt = new ReportDocument();
            string path1;
            path1 = Server.MapPath("CrystalReport.rpt");
            oRpt.Load(path1);
    dr.Tables[0].TableName="T_Demo";
            oRpt.SetDataSource(dr);
            for (int i = 0; i == oRpt.Database.Tables.Count - 1; i++)
            {
            logOnInfo.ConnectionInfo.ServerName = "ORCL_wang.";
                logOnInfo.ConnectionInfo.DatabaseName = "";
                logOnInfo.ConnectionInfo.UserID = "GX_RLGL";
                logOnInfo.ConnectionInfo.Password = "ok";
                oRpt.Database.Tables[0].ApplyLogOnInfo(logOnInfo);

            }
            CrystalReportViewer1.ReportSource = oRpt;

      CrystalReportViewer1.ParameterFieldInfo = pfs;



HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-13 13:14
你好,我按照你说的传参数怎么传不过去啊我的代码如下: 再问大家一个问题啊,报表怎么传参数啊,我按网上说的,传不过去,我的代码如下: private void BindReportPARParam() //传参数 { ParameterFields pfs = new ParameterFields(); var paramField = new ParameterField(); var discreteVal = new ParameterDiscreteValue(); paramField.ParameterFieldName = "beg_tim"; discreteVal.Value = KeyValue_KSSJ.Text; paramField.CurrentValues.Add(discreteVal);  paramField.ParameterFieldName = "end_tim"; discreteVal.Value = KeyValue_JSSJ.Text; paramField.CurrentValues.Add(discreteVal); pfs.Add(paramField); //重复加多个参数 // 最后设置参数信息: CrystalReportViewer1.ParameterFieldInfo = pfs; } private void BindReport()//报表绑定数据 { DataSet LRData = BF.GetList(cx_tiaojian()); TableLogOnInfo logOnInfo = new TableLogOnInfo(); ReportDocument oRpt = new ReportDocument(); string path1; path1 = Server.MapPath("JJInfoReport.rpt"); oRpt.Load(path1); LRData.Tables[0].TableName = "JJ_BILL"; oRpt.SetDataSource(LRData); CrystalReportViewer1.ReportSource = oRpt; BindReportPARParam(); Session["myRpt"] = oRpt; }
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-17 16:28
我的代码如下: 再问大家一个问题啊,报表怎么传参数啊,我按网上说的,传不过去,我的代码如下: private void BindReportPARParam() //传参数 { ParameterFields pfs = new ParameterFields(); var paramField = new ParameterField(); var discreteVal = new ParameterDiscreteValue(); paramField.ParameterFieldName = "beg_tim"; discreteVal.Value = KeyValue_KSSJ.Text; paramField.CurrentValues.Add(discreteVal);  paramField.ParameterFieldName = "end_tim"; discreteVal.Value = KeyValue_JSSJ.Text; paramField.CurrentValues.Add(discreteVal); pfs.Add(paramField); //重复加多个参数 // 最后设置参数信息: CrystalReportViewer1.ParameterFieldInfo = pfs; } private void BindReport()//报表绑定数据 { DataSet LRData = BF.GetList(cx_tiaojian()); TableLogOnInfo logOnInfo = new TableLogOnInfo(); ReportDocument oRpt = new ReportDocument(); string path1; path1 = Server.MapPath("JJInfoReport.rpt"); oRpt.Load(path1); LRData.Tables[0].TableName = "JJ_BILL"; oRpt.SetDataSource(LRData); CrystalReportViewer1.ReportSource = oRpt; BindReportPARParam(); Session["myRpt"] = oRpt; }
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-17 16:29
0

楼主想要传参预览,至少page_load时要带个参数过来撒。

发香已散 | 园豆:4 (初学一级) | 2010-08-13 16:23
报表控件的EnableParameterPrompt="False"试试
支持(0) 反对(0) 发香已散 | 园豆:4 (初学一级) | 2010-08-13 16:29
您说的是解决我翻页提示登陆框的问题吗,我设置了不行啊
支持(0) 反对(0) 流浪蜗牛 | 园豆:180 (初学一级) | 2010-08-17 08:20
0

其实很简单,连接字符串的问题。看看里面有没有 password=你的密码 ,没有的话加上就好了

王刘伟 | 园豆:198 (初学一级) | 2013-04-26 15:39
0

水晶报表经常报错,我用得实在受不了,就换finereport了

我是叮当猫 | 园豆:218 (菜鸟二级) | 2015-01-29 11:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册