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-server 可能在也可能不在同一台 pc 中。

4

7 回答 7

2

我有一个类似的问题。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 上却遇到了同样的问题。

希望这可以帮助。

于 2013-07-23T00:46:57.373 回答
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;

    }
于 2013-07-23T03:34:07.840 回答
0

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

于 2013-07-23T00:16:50.340 回答
0

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

Report.SetDatabaseLogon("sa", "XXXXX","ServerName", "DatabaseName") 用于 Sql 服务器。

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

于 2015-03-25T18:26:37.383 回答
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();
于 2016-04-26T05:16:16.350 回答
0

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

asp下图............只安装客户端工具连接而不是完整的Sql server数据库......在此处输入图像描述

于 2017-08-24T05:26:01.783 回答
0

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

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

于 2019-05-01T07:02:58.393 回答