首先,新建一個水晶報表的文件,這個時候要給這個報表文件綁定一個oracle數據源,

選擇右側菜單的這個東西,選擇“數據庫專家”,打開之后是這么一個界面:

選擇建立新連接:

這個地方最關鍵,也是我為什么要寫這篇日志的原因。這里很坑,就是這里的服務一定要是Oracle安裝程序里的tnsnames.ora文件配置的節點的名稱,切記!
例如這個:
ALi=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=192.168.1.1)
(PORT=1521)
)
(CONNECT_DATA=
(SERVICE_NAME=mir)
)
)
這里的服務就要填寫ALi。然后再輸入相應的用戶名和密碼就OK了。
第二章:參數
首先,水晶報表里面和RDLC一樣有參數字段,然后水晶報表的數據源里面寫自定義SQL的時候也是可以定義參數字段的。OK,那么問題來了,我們從.Net程序里傳入的參數字段是什么呢?
首先,你在數據源自定義的sql里面新增的參數,會自動在報表參數字段中相應的新增一個參數。然后你也可以自己在參數字段中新增參數。跟數據源綁定的參數最下角是有一個小標識的:

最后,上完整的.Net端的代碼:
//實例化報表 ReportDocument rpt = new ReportDocument(); rpt.Load(Application.StartupPath + "\\Pan.rpt"); //注冊數據源,如果不注冊則打開報表的時候會提示登錄 TableLogOnInfo log = new TableLogOnInfo(); log.ConnectionInfo.ServerName = "4160"; log.ConnectionInfo.DatabaseName = "orcl"; log.ConnectionInfo.UserID = "UserId"; log.ConnectionInfo.Password = "XXXX"; rpt.Database.Tables[0].ApplyLogOnInfo(log); //為報表控件綁定報表 this.crystalReportViewer1.ReportSource = rpt; //設置參數,這里需要三個變量,對應的報表中每一個參數都可以傳入多個值 ParameterFields t = new ParameterFields(); ParameterField paramField = new ParameterField(); ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue(); ParameterValues paramValues = new ParameterValues(); paramField.ParameterFieldName = "ProductId"; paramDiscreteValue.Value = "PA01010020"; paramValues.Add(paramDiscreteValue); paramField.CurrentValues = paramValues; t.Add(paramField); this.crystalReportViewer1.ParameterFieldInfo = t;
