.Net與Oracle的資料庫連線

iDotNetSpace發表於2008-09-24

ODBC     
    New   version:   
  "Driver={Microsoft   ODBC   for   Oracle};Server=OracleServer.world;Uid=Username;Pwd=asdasd;"     

  Old   version:   
  "Driver={Microsoft   ODBC   Driver   for   Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword;"     
    OLE   DB,   OleDbConnection   (.NET)     
    Standard   security:   
     "Provider=msdaora;Data   Source=MyOracleDB;User   Id=UserName;Password=asdasd;"    
  This   one's   from   Microsoft,   the   following   are   from   Oracle  
    Standard   Security:    
  "Provider=OraOLEDB.Oracle;Data   Source=MyOracleDB;User   Id=Username;Password=asdasd;"     
 
    Trusted   Connection:   
  "Provider=OraOLEDB.Oracle;Data   Source=MyOracleDB;OSAuthent=1;"     
 
    OracleConnection   (.NET)     
   
    Standard:   
  "Data   Source=MyOracleDB;Integrated   Security=yes;"    
  This   one   works   only   with   Oracle   8i   release   3   or   later  
    Specifying   username   and   password:  
   
  "Data   Source=MyOracleDB;User   Id=username;Password=passwd;Integrated   Security=no;"    
  This   one   works   only   with   Oracle   8i   release   3   or   later  
    Declare   the   OracleConnection:  
   
  C#:  
  using   System.Data.OracleClient;  


  


  OracleConnection   oOracleConn   =   new   OracleConnection();  
  oOracleConn.ConnectionString   =   "my   connection   string";  
  oOracleConn.Open();     
 
  VB.NET:  
  Imports   System.Data.OracleClient  
  Dim   oOracleConn   As   OracleConnection   =   New   OracleConnection()  
  oOracleConn.ConnectionString   =   "my   connection   string"  
  oOracleConn.Open()     
 
    Core   Labs   OraDirect   (.NET)     
    Standard:  
  "User   ID=scott;   Password=tiger;   Host=ora;   Pooling=true;   Min   Pool   Size=0;Max   Pool   Size=100;   Connection   Lifetime=0"    
   
    Data   Shape     
    
    MS   Data   Shape:  
  "Provider=MSDataShape.1;Persist   Security   Info=False;Data   Provider=MSDAORA;Data   Source=orac;user   id=username;password=mypw"
開發人員應當注意不要依賴垃圾回收機制去釋放資料庫連線,因為當引數超出作用域時,資料庫連線並沒有得必要的關閉,這種資料庫資源洩漏將導致建立新連線時丟擲連線錯誤。

建立資料庫連線池
當開啟一個資料庫連線時,一個資料庫連線池也就建立了。資料庫連線池的建立與資料庫連線字串精確的相關(包括空格、大小寫)。所有的連線池是根據連線字串來區分的。在建立一個新的資料庫連線時,如果連線字串不完全相同,將建立不同的連線池。

一旦資料庫連線池被建立,它將一直存在直到該程式結束。維護一個非活動狀態的連線池幾乎不需要什麼系統開銷。

連線池中的資料庫連線
連線池根據唯一的連線字串被建立。在連線池被建立的同時,連線池將建立最小的資料庫連線,當連線不夠用時,連線池將逐個新增資料庫連線直到達到最大連線數,此後的連線請求將被加入請求佇列裡。當呼叫資料庫連線物件的Close方法或Dispose方法時,資料庫連線將被資料庫連線池回收。

當資料庫連線使用完成後,要呼叫Close方法或Dispose方法將它返回連線池。沒有顯式釋放的資料庫連線可能會沒有返回連線池。

注意不要在類的Finalize方法中呼叫任何管理類如Connection,DataReader等的Finalize方法,必須將資料庫連線的釋放權交給連線池。

釋放資料庫連線
當資料庫連線超時或服務已經完成時,連線池將會將其資源釋放,這隻能通過試圖與資料庫通訊來判斷。如果發現資料庫連線不可用,它將被標記為不可用資源。資料庫連線池將定時掃描資料庫連線,釋放所有不可用資源。

如果發現現有的資料庫連線不可用,那麼可能是該連線被資料庫連線池標記為不可用資源了,這時將丟擲一個異常。儘管如此,你還是必須釋放連線,將它返回連線池。

支援Transaction
資料庫連線池內的資料庫連線是按照Transaction Context劃分的,每當連線池接到連線請求時,他將返回與請求者Transaction Context相匹配的資料庫連線。因此,每個連線池都由數個Transaction Context相關的資料庫連線和一個Transaction Context無關的資料庫連線組成。當資料庫連線被返回連線池時,它將被放回對應的Transaction Context組中。

用連線字串關鍵字控制資料庫連線池
OracleConnection物件的屬性ConnectionString有一些能支援連線池控制的key-value字串。下表是這些key-value字串的詳細說明。

名稱
預設值
說明

Connection Lifetime
0
當資料庫連線被返回到連線池中時,它的建立時間將與當前時間比較,如果超過了Connection Lifetime規定的時間,它將被釋放掉。

為0時將被視為最大連線時間。

Enlist
'true'
當此值為true時,池中現存的所有資料庫連線將被加入到它的建立執行緒的Transaction Context中。如果不存在這個Transaction Context則無任何變化。

Max Pool Size
100
連線池能建立的最大資料庫連線數。

Min Pool Size
0
連線池要保持的最小資料庫連線數。

Pooling
'true'
當設為true時,資料庫連線將由相應的連線池管理。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-462840/,如需轉載,請註明出處,否則將追究法律責任。

相關文章