[英]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();
確保報表中使用了“字段資源管理器”中的所有“數據庫字段”。從數據集中刪除報表中不會使用的所有表字段資源管理器>>數據庫字段,右鍵單擊>>數據庫專家>>選中表
注意:如果數據表為空,則會顯示此彈出窗口
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.