跟小D每日学口语

WEB水晶报表提示连接数据库

前段时间有人问我,为什么报表设计时以OLEDB方式连接数据库,WEB打印时有时候会提示连接数据库,但是重新作一份又没有了。

我作了一些测试,发现是这样的,当你设计报表时是以A1服务器, A1数据库),运行时是以B1服务器,A2数据库(只要是服务器或是数据库有1个不同于设计时的),你在运行时,它就会提示你输入数据库和密码,尽管你已经设了logininfo之类的信息,依然无效。 我猜水晶报表会记录你的服务器和数据库名,当你换了数据库或服务器时,虽然你的数据库结构是一样,水晶报表也会认为你可能结构不一样,所以会提示这个。它好像需要你的一个手动确认安全的一个过程一样。其实我认为这应是水晶报表的一个bug,但为什么一直它不去解决我就不知道了。说了这么多废话,还是代码直接点:

        ReportDocument repDoc = new ReportDocument();
        string strReportFileName = "";
        string strPath = Server.MapPath("~\\Reports\\" + strReportFileName);            
        repDoc.Load(strPath);

   string loginuser = "sa";

        string password = "123";

        string servername = "server1";

        string databasename = "database1"

        repDoc.SetDatabaseLogon(loginuser, password, server1, database1, true);

            CrystalDecisions.Shared.ConnectionInfo loConnInfo = new ConnectionInfo();           
            loConnInfo.ServerName = server1;
            loConnInfo.DatabaseName = database1;
            loConnInfo.UserID = loginuser;
            loConnInfo.Password = password;

            CrystalDecisions.Shared.TableLogOnInfo loTableLogonInfo;

            foreach (CrystalDecisions.CrystalReports.Engine.Table table in repDoc.Database.Tables)
            {
                loTableLogonInfo = table.LogOnInfo;
                loTableLogonInfo.ConnectionInfo = loConnInfo;
                table.ApplyLogOnInfo(loTableLogonInfo);
            }

            CrystalReportViewer1.ReportSource = repDoc;

 

这样就完全没有问题了。

posted @ 2010-11-14 22:23  javak  阅读(328)  评论(1编辑  收藏  举报