2010-04-27 25 views
0

如何在不使用DSN或使用C#的預加載數據集的情況下將Crystal Report(VS 2008 basic)連接到MySQL DB?如何通過不帶DSN或數據集的C#代碼直接將Crystal Reports連接到MySQL

我需要在幾個地方安裝程序,所以我必須更改連接參數。我不想在每個地方創建DSN,也不想預先加載DataSet並將其傳遞給報表引擎。我使用nhibernate來訪問數據庫,因此創建和填充額外的DS將需要兩倍的工作量和稍後的額外維護時間。我認爲最好的選擇是讓水晶報表引擎通過ODBC自己連接到MySQL服務器。

我設法建立在使用數據庫專家報告設計(VS2008)的連接,創建ODBC(RDO)連接,並輸入該連接字符串

「DRIVER = {MySQL的ODBC 5.1驅動}; SERVER = myserver.mydomain「

並在填寫」用戶ID「,」密碼「和」數據庫「參數的」下一頁「頁面中。我沒有填寫「服務器」參數。有效。事實上,如果你使用前一個連接字符串,那麼放在「服務器」參數上並不重要,看起來這個參數是未使用的。另一方面,如果使用「DRIVER = {MySQL ODBC 5.1驅動程序}」作爲連接字符串,並稍後使用服務器的FQDN填充「服務器」參數,則連接不起作用。

我該怎麼做代碼?我到目前爲止所看到的所有例子都使用DSN或DataSet方法。我看到the same question posted but for PostgreSQL,並試圖將其調整到mysql,但迄今爲止,沒有成功。第一種方法:

Rp.Load(); 
Rp.DataSourceConnections[0].SetConnection("DRIVER={MySQL ODBC 5.1 Driver};SERVER=myserver.mydomain", "database", "user", "pass"); 
Rp.ExportToDisk(ExportFormatType.PortableDocFormat, "report.pdf"); 

加註ExportToDisk期間CrystalDecisions.CrystalReports.Engine.LogOnException

消息=「登錄失敗\ n詳細信息:IM002:[微軟] [ODBC驅動程序管理器]數據源名稱沒有找到和指定默認驅動程序\ rError在文件中的臨時文件路徑 .RPT:\ n無法連接:不正確的登錄參數

設置InnerException是System.Runtime.InteropS ervices.COMException用相同的消息,並沒有任何的InnerException

的「沒有指定默認驅動程序」使我不知道如果服務器參數是未使用過這裏(見上文)。在這種情況下:我如何指定連接字符串?

我還沒有嘗試第二種方法,因爲它不適用。

有沒有人知道解決方案?

回答

0

我認爲通過nHibernate生成數據集可能會更快,或者直接執行ADO.NET查詢,然後嘗試解決問題。

+0

如何通過NHibernate生成數據集?有沒有自動的方法? (還沒有看到任何方式,所有的例子都是手動的:導航對象圖並逐一添加行)這就是爲什麼我反對這種方式,BD架構的任何改變,然後我必須改變DS模式和生成邏輯也不能保持同步。你知道任何自動方式嗎? – 2010-04-28 17:29:11

+0

OTOH,我修補程序在同時生成DSN並使報告使用該DSN。這是一個混亂,因爲你需要成爲管理員添加它,所以....:-( – 2010-04-28 17:31:38

+0

沒有快速的方法可以將數據集從nHibernate中取出,我只是說自己創建並填充代碼,這是一個10分鐘的工作。 – Doobi 2010-04-29 13:28:21