如何防止水晶报表中的数据库登录窗口?

时间:2013-07-23 00:08:38

标签: c# .net winforms crystal-reports

我正在开发一个Windows应用程序,我在其中使用Crystal Report(我是Crystal报道的新手)我面临的问题是当我在第一次加载时测试报告时它工作正常但是当我尝试刷新报表时给我数据库登录窗口,有没有办法防止这个窗口?以及如何使用代码设置报告的连接字符串?

注意: 1 - 我试过

private void crystalReportViewer1_ReportRefresh(object source, CrystalDecisions.Windows.Forms.ViewerEventArgs e)
    {
        Myreport.SetDatabaseLogon("username", "password", "server", "dbname", false);
    }

但我仍然可以获得数据库登录窗口。

2 - 我使用水晶报告拖放来创建我的报告。

3 - 这是一个Windows应用程序和sql server 2008数据库C#是编程语言。

应用程序中的4服务器可能在同一台PC上,也可能不在同一台中。

7 个答案:

答案 0 :(得分:1)

我有类似的问题。 SetDatabaseLogon函数对我不起作用,因此我不得不手动为报表中的每个表分配连接详细信息。我认为该函数适用于SQL Server(我正在使用Sybase ASE),但您可能遇到与我相同的问题。

ConnectionInfo connInfo = new ConnectionInfo();
connInfo.ServerName = "Driver={Adaptive Server Enterprise};Server=x.x.x.x;Port=x;";
connInfo.DatabaseName = "dbname";
connInfo.UserID = "username";
connInfo.Password = "password";

TableLogOnInfo tableLogOnInfo = new TableLogOnInfo();
tableLogOnInfo.ConnectionInfo = connInfo;

foreach(Table table in reportDoc.Database.Tables)
{
  table.ApplyLogOnInfo(tableLogOnInfo);
  table.LogOnInfo.ConnectionInfo.ServerName = connInfo.ServerName;
  table.LogOnInfo.ConnectionInfo.DatabaseName = connInfo.DatabaseName;
  table.LogOnInfo.ConnectionInfo.UserID = connInfo.UserID;
  table.LogOnInfo.ConnectionInfo.Password = connInfo.Password;

  // Apply the schema name to the table's location
  table.Location = "dbo." + table.Location;
}

显然你的connInfo.ServerName会有所不同,但我已经把我用过的模式包含在遇到同样问题的其他人身上但是在ASE上。

希望这有帮助。

答案 1 :(得分:1)

private void button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt = selectallrecord();
        CrystalReport1 cr1 = new CrystalReport1();
        cr1.SetDataSource(dt);
        crystalReportViewer1.ReportSource = cr1;


    }



    public DataTable selectallrecord()
    {
        Connection c = new Connection();
        //c.main();

        if (c.cn.State == ConnectionState.Open)
        {
            c.cn.Close();
            c.cn.Open();
        }

        DataSet DS = new DataSet();
        string USER = "";
        USER = "SELECT * FROM StudentInfo";
        SqlDataAdapter DA = new SqlDataAdapter(USER, c.cn);
        DA.Fill(DS);
        DataTable DT = DS.Tables[0];
        return DT;

    }

答案 2 :(得分:0)

听起来你正在关闭连接然后当你刷新它没有重新打开连接时......你可以发布完整的代码来验证吗?

答案 3 :(得分:0)

将数据库凭据提供给方法SetDatabaseLogon,如下所示  用于访问db的Report.SetDatabaseLogon(“”,“XXX”)

用于Sql server的Report.SetDatabaseLogon(“sa”,“XXXXX”,“ServerName”,“DatabaseName”)。

但是在行步之后给出 Report.SetDataSource(DT)

答案 4 :(得分:0)

TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            Tables CrTables;
            SalesManVisit cryRpt = new SalesManVisit();

            crConnectionInfo.ServerName = @"TLPL_ICT_OPR\xxxxxxxxx";
            crConnectionInfo.DatabaseName = "xxxxxxx";

            crConnectionInfo.UserID = "xxxxx";
            crConnectionInfo.Password = "xxxxxx";



            CrTables = cryRpt.Database.Tables;
            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;
                CrTable.ApplyLogOnInfo(crtableLogoninfo);
            }
            CrystalReportViewer1.ReportSource = cryRpt;
            CrystalReportViewer1.RefreshReport();
            cryRpt.Refresh();

答案 5 :(得分:0)

我的问题是使用SQL Server安装源安装SQL Server 2014客户端工具连接和后向客户端连接组件。

asp下面的图片.........只安装客户端工具连接不完整的Sql server数据库...... enter image description here

答案 6 :(得分:0)

确保在报表上使用“字段资源管理器”中的所有“数据库字段” 从数据集中删除所有不会在报表上使用的表 字段浏览器>>数据库字段,右键单击>>数据库专家>>选定的表

注意:如果数据表为空,则会显示此弹出窗口