首页 文章

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

提问于
浏览
1

我正在开发一个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上,也可能不在同一台PC中 .

6 回答

  • 0

    我遇到了类似的问题 . 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上的模式 .

    希望这可以帮助 .

  • 0
    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;
    
        }
    
  • 1

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

  • 1

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

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

    但是在行后报告.SetDataSource(Dt)

  • 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();
    
  • 0

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

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

相关问题