.NET 水晶報表拉模式動態鏈接
2014年4月29日ASP.NET Standard
自從接觸了水晶報表,我整個人都不好了,各種奇葩設定、各種拖不動、對不齊……不過這次不是說這些問題
首先水晶報表區分PULL(拉)及PUSH(推)模式,PULL模式是指報表直接與數據庫鏈接;PUSH模式指報表不直接鏈接數據庫,而是由我們從程序中將數據推送給它,一般需要一個xsd文件做表結構中轉(不然怎麼在編輯報表時拖出字段)。
以下主要是關於PULL MODE的內容:
當前我們遇到一個問題,就是公司報表大多使用拉模式,特別是什麽購貨發票啊什麽訂單啊都是。而這就帶來一個問題——本公司的每一家子公司都會使用同樣的系統,每次新建系統時數據庫會進行遷移,那麼就需要一個個報表去改數據庫鏈接!純粹是浪費體力
最近發現可以在程序中動態設定數據庫鏈接,代碼如下:
TableLogOnInfo log = new TableLogOnInfo();
ConnectionInfo con = new ConnectionInfo();
con.ServerName = “serverName“;//數據庫服務名
con.UserID = “UserID“;//賬號
con.Password = “password“;//密碼
con.DatabaseName = “DatabaseName“;//數據庫名,Oracle不用填,為空
foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in myReport.Database.Tables)
{
log = tbl.LogOnInfo;
log.ConnectionInfo = con;
tbl.ApplyLogOnInfo(log);//更改登陸參數
tbl.Location = “新數據庫名“ + “.“ + tbl.Location;//更改前綴為新數據庫表名,必加
}
由於水晶報表自帶類庫也比較強大,以上操作可以 簡化為:
myReport.SetDatabaseLogon(“UserID“, “Password“, “serverName“, “DatabaseName“);
foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in myReport.Database.Tables)
{
tbl.Location = “新數據庫名“ + “.“ + tbl.Location;//說了這句狠重要
}
這個 “新數據庫名” 必須是大寫!!!!不然就報錯!!!!
目前為止,同一個ServerName內進行數據遷移沒有發現問題,可以改名實現自動切換數據庫;但跨Server沒有成功,尚在調試當中~
目前為止,同一個ServerName內進行數據遷移沒有發現問題,可以改名實現自動切換數據庫;但跨Server沒有成功,尚在調試當中~
发表评论或回复