- .NET Framework 內建 System.Data.OracleClient,已被標為 Obsolete,就別再留戀了。
- 開發環境一般會安裝 Oracle Client 與 ODAC (Oracle Data Access Component) 兩者,但事實上只要 ODAC 就夠了。若是要直接連 Oracle 查、改資料這個理由,除了 Oracle Client 之外,DBeaver、TOAD、甚至 Visual Studio 都可以用才對。
- ODAC 也有分 XCopy 或其他一大堆帶不同元件的包裝,看來 XCopy 的比較單純,利用解壓後批次檔安裝所有部份比較保險,記得要用系統管理權限,事後還要對安裝路徑加入全域 PATH 環境變數,甚至較舊的作業系統可能還要調整該目錄的安全性,開放給所有 Authenticated Users,如果已經開了 Visual Studio 也要重開才能讀到新的環境變數。
- 在 64 位元的作業環境,32 / 64 位元的 ODAC 都可運作,但事實上 32 位元的比較方便,原因是 Visual Studio 附帶的 IIS Express 預設還是 32 位元(設定在 Tools -> Options -> Projects and Solutions -> Web Projects),兩者必須搭配。
- ODAC 畢竟還是 Native,其實早就有 Oracle ManagedDataAccess NuGet Package 可用,安裝管理都方便。就算是舊程式轉換也只要改 Namespace (Oracle.DataAccess -> Oracle.ManagedDataAccess) 就好。
- 也不再仰賴 tnsnames.ora 設定連線資訊,可以查查 Oracle 有個名詞叫 EZCONNECT。例如我們以前在設定檔寫 DataSource=abc;User Id=... 還要搭配 tnsnames.ora 其中一段 abc=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...,現在只要改成 DataSource=<HostNameOrIP>:<Port>/abc;User Id=... 就夠了,幹嘛要分兩個地方設定?
星期三, 1月 20, 2016
IIS + Oracle 的系統開發
星期一, 12月 09, 2013
如何確認 PreparedStatement 有在 Oracle 被執行到?
假設程式如下:
String s = "Select COUNT(*) From TABLE1 Where ID = ?";
PreparedStatement p = connection.prepareStatement(s);
Object o = (Object)"id";
p.setObject(1, o);
ResultSet r = p.executeQuery();
可以藉由 Oracle SQL Developer 執行以下的查詢(在程式執行前後各一次):
Select FETCHES From V$SQL Where SQL_TEXT = 'Select COUNT(*) From TABLE1 Where ID = :1';
如果控制在很短的時間內,第二次的結果比前次多一,則幾乎可以確定這個敘述有被執行到。其中 V$SQL 或是 V$SQLAREA 是一個內建的統計用 View,FETCHES 是這個 View 的一個欄位,SQL_TEXT 是 SQL Statement,「:1」表示查詢語句的第一個變數。
String s = "Select COUNT(*) From TABLE1 Where ID = ?";
PreparedStatement p = connection.prepareStatement(s);
Object o = (Object)"id";
p.setObject(1, o);
ResultSet r = p.executeQuery();
可以藉由 Oracle SQL Developer 執行以下的查詢(在程式執行前後各一次):
Select FETCHES From V$SQL Where SQL_TEXT = 'Select COUNT(*) From TABLE1 Where ID = :1';
如果控制在很短的時間內,第二次的結果比前次多一,則幾乎可以確定這個敘述有被執行到。其中 V$SQL 或是 V$SQLAREA 是一個內建的統計用 View,FETCHES 是這個 View 的一個欄位,SQL_TEXT 是 SQL Statement,「:1」表示查詢語句的第一個變數。
訂閱:
文章 (Atom)