顯示具有 Oracle 標籤的文章。 顯示所有文章
顯示具有 Oracle 標籤的文章。 顯示所有文章

星期三, 1月 20, 2016

IIS + Oracle 的系統開發

  1. .NET Framework 內建 System.Data.OracleClient,已被標為 Obsolete,就別再留戀了。
  2. 開發環境一般會安裝 Oracle Client 與 ODAC (Oracle Data Access Component) 兩者,但事實上只要 ODAC 就夠了。若是要直接連 Oracle 查、改資料這個理由,除了 Oracle Client 之外,DBeaver、TOAD、甚至 Visual Studio 都可以用才對。
  3. ODAC 也有分 XCopy 或其他一大堆帶不同元件的包裝,看來 XCopy 的比較單純,利用解壓後批次檔安裝所有部份比較保險,記得要用系統管理權限,事後還要對安裝路徑加入全域 PATH 環境變數,甚至較舊的作業系統可能還要調整該目錄的安全性,開放給所有 Authenticated Users,如果已經開了 Visual Studio 也要重開才能讀到新的環境變數。
  4. 在 64 位元的作業環境,32 / 64 位元的 ODAC 都可運作,但事實上 32 位元的比較方便,原因是 Visual Studio 附帶的 IIS Express 預設還是 32 位元(設定在 Tools -> Options -> Projects and Solutions -> Web Projects),兩者必須搭配。
  5. ODAC 畢竟還是 Native,其實早就有 Oracle ManagedDataAccess NuGet Package 可用,安裝管理都方便。就算是舊程式轉換也只要改 Namespace (Oracle.DataAccess -> Oracle.ManagedDataAccess) 就好。
  6. 也不再仰賴 tnsnames.ora 設定連線資訊,可以查查 Oracle 有個名詞叫 EZCONNECT。例如我們以前在設定檔寫 DataSource=abc;User Id=... 還要搭配 tnsnames.ora 其中一段 abc=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...,現在只要改成 DataSource=<HostNameOrIP>:<Port>/abc;User Id=... 就夠了,幹嘛要分兩個地方設定?

星期一, 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」表示查詢語句的第一個變數。