在剛接觸C#的時候由於公司使用的就是Oracle資料庫,那麼C#怎麼連接Oracle資料庫就成了首要去掌握的知識點了。在那時沒有ODP.NET,但visual studio卻對Oralce資料庫的調用進行了集成,就是下圖中的這個,儘管現在使用這個的時候visual studio提醒過時的,但在那時卻 ...
在剛接觸C#的時候由於公司使用的就是Oracle資料庫,那麼C#怎麼連接Oracle資料庫就成了首要去掌握的知識點了。在那時沒有ODP.NET,但visual studio卻對Oralce資料庫的調用進行了集成,就是下圖中的這個,儘管現在使用這個的時候visual studio提醒過時的,但在那時卻是非常好用的。
為什麼現在visual studio中這個程式集依然能使用,有ODP.NET,單單要拿出Oracle.ManagedDataAccess.dll進行本文的重點呢?
1、visual studio中提醒過時,因為微軟和甲骨文存在資料庫的競爭關係,並且從.NET的更新來看這個程式集沒有再更新過,對於資料庫一直在更新而調用的程式集一直不更新敢用下去麽?還有一個我認為非常重要的原因就是使用這個程式集,擺脫不了每一個運行程式的客戶機上都要去安裝Oracle客戶端的事實,試想一下,如果用戶數量巨大的時候,安裝客戶端的工作量就相當的大,很耗費資源;
2、甲骨文後來出了ODP.NET,各種資料以及官網上都說需要安裝ODP.NET,然後引用Oracle.ManagedDataAccess.dll,他和visual studio中的程式集最大的區別在於會隨著資料庫更新,是oracle官方出的驅動;
3、其實經過測試,ODP.NET的安裝完全是沒有必要的,直接在網上下載一個Oracle.ManagedDataAccess.dll,按如下方式引用即可,使用此種方式減少了ODP.NET的安裝,無視操作系統的位數,最重要的是減少了Oracle客戶端的安裝;
那在哪裡下載Oracle.ManagedDataAccess.dll呢?如果Oracle.ManagedDataAccess.dll有更新怎麼知道呢?這個時候全宇宙最強大開發工具登場了!
安裝完成就可以擼代碼了,並且如果有更新可以隨時能看到。並且在編程方面和以前使用System.Data.OracleClient程式集沒有多大的不同,基本上拿以前使用System.Data.OracleClient程式集的代碼做少許的改動即可。
1、使用了連接字元串,而不是用oracle客戶端的服務名了;
2、幾個命名空間的變化;
下麵是對資料庫常用操作的封裝
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using Oracle.ManagedDataAccess.Client; using System.Data; using System.IO; using System.Collections; using System.Diagnostics; using Oracle.ManagedDataAccess.Types; namespace OracleDemo { public class OracleHelper { private static string connStr = "User Id=admin;Password=123;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=test)))"; #region 執行SQL語句,返回受影響行數 public static int ExecuteNonQuery(string sql, params OracleParameter[] parameters) { using (OracleConnection conn = new OracleConnection(connStr)) { conn.Open(); using (OracleCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); return cmd.ExecuteNonQuery(); } } } #endregion #region 執行SQL語句,返回DataTable;只用來執行查詢結果比較少的情況 public static DataTable ExecuteDataTable(string sql, params OracleParameter[] parameters) { using (OracleConnection conn = new OracleConnection(connStr)) { conn.Open(); using (OracleCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Parameters.AddRange(parameters); OracleDataAdapter adapter = new OracleDataAdapter(cmd); DataTable datatable = new DataTable(); adapter.Fill(datatable); return datatable; } } } #endregion } }
以下代碼是調用部分
string sqlString = "Select a.col1,a.col2 From test a Where a.id=:id"; DataTable dt = OracleHelper.ExecuteDataTable(sqlString,new OracleParameter(":id",1));
程式編寫完成,生成完成後,目錄大概如下:
這時候拷貝Debug文件夾到目標客戶電腦上即可直接運行了(前提是目標客戶電腦上有.NET Framework),完全擺脫安裝Oracle客戶端。