[英]Report asking for database login on setting DataTable as DataSource
報表設計器在設計器中創建水晶報表,該報表通過ODBC(DSN)連接直接連接到數據庫。 相同的報告通過DSN通過Winform(C#)應用程序執行,並提供數據庫服務器,數據庫,用戶ID和密碼。
我需要對Crystal Report對象進行此類更改。 ReportDocument不應直接通過DSN連接到數據庫。 相反,我們將通過調用各自的存儲過程和參數System.Data.DataTable
來通過服務帶來數據。 此DataTable
對象應用於填充/生成報告。
我確實分別從ReportDocument.DataBase.Tables[I].Location
和ReportDocument.DataDefinition
對象獲取存儲過程和參數信息。 在使用ReportDocument.DataBase.Tables[I].SetDataSource(DataTable)
設置DataSource之后,它仍然要求數據庫/服務器和用戶憑證才能連接到服務器。
我們能否實現方案並使用內存表填充報表,而不是通過ODBC直接連接到數據庫?
您需要重點注意兩件事:
方案1:相同的服務器和數據庫名稱
在這種情況下,您需要使用SetDatabaseLogon
方法提供憑據,如下所示
'crDoc1 is your ReportDocument
'dtDataTable is your DataTable
'set database logon info
crDoc1.SetDatabaseLogon("db_user_name", "db_password", "db_server_name_or_ip", "database_name");
'set DataTable as DataSource
crDoc1.SetDataSource(dtDataTable)
方案2:不同的服務器或數據庫名稱
在這種情況下,您需要使用ApplyLogOnInfo
方法提供憑據
ConnectionInfo crConInfo = new ConnectionInfo();
TableLogOnInfo crTblLogonInfo = new TableLogOnInfo();
crConInfo.ServerName = "db_server_name_or_ip";
crConInfo.DatabaseName = "database_name";
crConInfo.UserID = "db_user_name";
crConInfo.Password = "db_password";
'crDoc1 is your ReportDocument
'dtDataTable is your DataTable
'Set DataSource to your DataTable
crDoc1.SetDataSource(dtDataTable)
'after setting the DataSource apply Logon credentials to each table in ReportDocument
Tables CrTables = crDoc1.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) {
crTblLogonInfo = CrTable.LogOnInfo;
crTblLogonInfo.ConnectionInfo = crConInfo;
CrTable.ApplyLogOnInfo(crTblLogonInfo);
}
crDoc1.Refresh();
CrystalReportViewer1.ReportSource = crDoc1;
注意:如果有任何子報表 ,則需要分別將SetDatabaseLogon
和/或ApplyLogOnInfo
應用於所有子報表及其表。
更新:
將ApplyLogOnInfo應用於子報表
foreach (ReportDocument srSubReport in crDoc1.Subreports) {
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in srSubReport.Database.Tables) {
crTblLogonInfo = CrTable.LogOnInfo;
crTblLogonInfo.ConnectionInfo = crConInfo;
CrTable.ApplyLogOnInfo(crTblLogonInfo);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.