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

Posted

技术标签:

【中文标题】如何防止水晶报表中的数据库登录窗口?【英文标题】:How to prevent database login window in crystal report? 【发布时间】:2013-07-23 00:08:37 【问题描述】:

我正在开发一个 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 个服务器可能在也可能不在同一台电脑上。

【问题讨论】:

【参考方案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 上的模式。

希望这会有所帮助。

【讨论】:

感谢您的回答,我会尝试并告诉您是否有效,再次感谢 非常感谢它部分工作,我的意思是它在数据库登录窗口中更改了服务器名称和数据库名称,但窗口仍然显示要求输入密码,是否有解决方案? 它现在工作了,我也忘了把它放在负载中,这就是问题,非常感谢:-D 快乐的舞蹈很高兴我能帮上忙【参考方案2】:
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;

    

【讨论】:

谢谢 SumitG 我明白了 Zec 的回答很好,再次感谢【参考方案3】:

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

【讨论】:

这是我在表单中使用的唯一代码,其他一切都只是拖放,没有任何代码,它是一个包含水晶报表查看器的表单,并且使用任务菜单绑定报表查看器和我没有其他代码,但我在问题中提出的报告刷新,你的回答是合乎逻辑的,但我既不打开也不关闭连接,提前谢谢【参考方案4】:

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

Sql server 的 Report.SetDatabaseLogon("sa", "XXXXX","ServerName", "DatabaseName")。

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

【讨论】:

【参考方案5】:
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();

【讨论】:

【参考方案6】:

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

下图asp............只安装客户端工具连接不完整的Sql server数据库......

【讨论】:

【参考方案7】:

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

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

【讨论】:

以上是关于如何防止水晶报表中的数据库登录窗口?的主要内容,如果未能解决你的问题,请参考以下文章

MVC 中的水晶报表

使用数据库专家在水晶报表上添加表格:登录失败

VB.net中如何制作水晶报表?

会用水晶报表crystal reports的请进

水晶报表 如何设置水晶报表 crystal reports 的字段自动换行

如何解决水晶报表10的部署问题