資料來源:mandy's工作雜貨舖..
最近寫了一支助學管理報表輸出程式,
將每學期的申請名冊及明細列印出來做相關業務的資料檔.
於是用vs2005 C# + Crystal Report + MSSql 去建立,製作過程蠻簡單的.
1.首先將crystal report報表檔建置起來.
2.建立一張window form,並拉進一個Crystal Report Viewer,並讓Crystal report Viewer連結到先前建立的報表檔.
3.為了不讓User每次執行報表輸出被詢問登入MSSQL帳號密碼,必須於報表之載入點告知帳號密碼:
ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(".\\Std_A_Bank_RPT.rpt");
foreach (CrystalDecisions.CrystalReports.Engine.Table table in reportDoc.Database.Tables)
{
CrystalDecisions.Shared.TableLogOnInfo rptlogin = table.LogOnInfo;
rptlogin.ConnectionInfo.ServerName = "伺服器位置";
rptlogin.ConnectionInfo.DatabaseName = "資料庫名稱";
rptlogin.ConnectionInfo.UserID = "登入帳號";
rptlogin.ConnectionInfo.Password = "登入密碼";
table.ApplyLogOnInfo(rptlogin);
}
CR_Std_A_Bank.ReportSource = reportDoc;
4.完成編譯並執行,結果在我PC上使用正常無誤,於是開開心心的要封裝部署成安裝檔,裝在User的PC..
想到這報表輸出不再透過我這裡了,一整個就覺的很爽,結果下去User那安裝後,一整個心涼了~見飄了~竟然問我MsSql帳號密碼....從那刻開始後的一星期我都在搞這帳號密碼的問題.....
這一星期中,試了N百次...就是很詭異,,
在有Sql Server的PC就沒問題...這實在很奇怪..
(其實這時我覺的應該是我部署時少了什麼資料庫元件)
還因此找了.Net小高手-朱小月同學幫忙..結果還是沒輒,問了同事Ms.C後,也沒解決成功.
後來又問了同事是否有遇過類似的問題,結果Mr.S說他曾經遇過,後來他就改成用ODBC去連結資料庫.
雖然有其他解決方式,但我就是不信邪,我覺的根本不可能發生這種事,完全沒道理,仍然努力上網爬文,
可是呢也沒什麼成效.
後來我拿了另一支同樣開發過程的程式來部署封裝測試是否會有同樣的問題,結果卻是成功的.
這下真的是見飄了,只好拿來比對我這支程式,看看有何差異,導致報表載入時,詢問MsSql帳號密碼.
後來發現一個不同--資料庫連線部份.
我猜想這應該就是為什麼老是問我帳號密碼的原因了.
原因是因為自從使用了MsSql Server2005後,各項資料庫連結提供者皆被預設為SQL Native Client Driver,後來也很習慣的選用SQL Native Client Driver.
而一般User的PC沒有安裝MSSql Server2005,所以沒有SQL Native Client Driver,
因此當我在建立報表時,雖然是透過OleDB,但因為使用SQL Native Client Driver 去連結資料庫,才會導致一般User無法連線的狀況.
解決方式有二:
1.修改報表檔改用Microsoft OLE DB Provider for SQL Server Driver去連結資料庫.
2.部署安裝檔時,把Sql Native Client Driver列入必要安裝,使User在安裝程式時,SQL Native Client Driver被裝入啟動.
我選擇的方式是一,我的習慣是儘量不在User電腦裡安裝非必要性元件或服務.
至於好處壞處,其實還是見人見智,總之歡喜就好,事情解決就好.
離婚證人 、台北離婚證人 、新竹離婚證人 、彰化離婚證人 、高雄離婚見證人
遺囑見證人 、結婚證人
留言列表