簡體   English   中英

如何防止水晶報表中的數據庫登錄窗口?

[英]How to prevent database login window in crystal report?

我正在開發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中。

我有一個類似的問題。 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上使用過的模式。

希望這可以幫助。

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;

    }

聽起來您正在關閉連接,然后在刷新時沒有重新打開連接...您可以張貼完整的代碼進行驗證嗎?

只需將您的數據庫憑據提供給方法SetDatabaseLogon,如下所示,即可訪問數據庫的Report.SetDatabaseLogon(“”,“ XXX”)

Sql Server的Report.SetDatabaseLogon(“ sa”,“ XXXXX”,“ ServerName”,“ DatabaseName”)。

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

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

我的問題是通過使用SQL Server安裝程序源安裝SQL Server 2014客戶端工具連接和向后客戶端連接組件。

asp下圖.........僅安裝客戶端工具連接性不完整的sql server數據庫... 在此處輸入圖片說明

確保報表中使用了“字段資源管理器”中的所有“數據庫字段”。從數據集中刪除報表中不會使用的所有表字段資源管理器>>數據庫字段,右鍵單擊>>數據庫專家>>選中表

注意:如果數據表為空,則會顯示此彈出窗口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM