.net程式員使用Oracle新手上路指南

來源:互聯網
上載者:User
雖然oracle,sqlserver都是關係型資料庫,sql語句大部分也差不多,但是從sqlserver換到oracle還是有很多不適應的地方,本文旨在協助廣大初次接觸oracle的.net程式員快速上手。 一、安裝oracle 11g 服務端(可選) 1.1 為什麼要安裝服務端?理論上講,本機只需要安裝oracle用戶端即可,但是很多時候本機有一個服務端學習起來會更方便。比如:資料庫的匯入/匯出,資料庫的建立等,均需要服務端。註:oracle的server真的很占記憶體,如果您的愛姬記憶體在2G以下,建議直接跳過本步驟吧. 1.2 服務端的安裝檔案http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html因為我的筆記本是Win2008 R2系統,所以選擇了特定的win2008 x64版本(安裝檔案約1.9G),如下http://www.oracle.com/technetwork/database/enterprise-edition/downloads/111070-win64-2008soft-084715.html在win200 r2上安裝時,會提示作業系統不滿足安裝要求,如:不用理會,直接把問題項前面的複選框勾上,然後就能進入下一步繼續安裝了。安裝完成的最後一個介面上,在口令管理裡,最好把scott帳號解除鎖定(這是學習oracle的經典帳號,很多樣本教程都是用這個帳號串連的,其預設密碼是tiger) 1.3 如何測試服務端是否安裝正確了先開啟Net Manager展開服務命名點擊左側“紅色叉”按鈕下的表徵圖如果提示測試成功,則表示server端運行正常了。 二、安裝for .Net特定的用戶端 ODAC with Oracle Developer Tools for Visual Studio這是oracle官方推出的for .net的串連用戶端,效能優於微軟內建的System.Data.OracleClient下的東東,也是目前綜合效能最好的.net用戶端
http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html一路Next即可,如果提示作業系統不滿足要求,參考前面安裝服務端時的處理

三、安裝pl/sql developeroracle安裝完成後,內建了一個叫sql plus的查詢工具,相當於sqlserver中的查詢分析器,能用它練習sql,但是這個東東功能太弱,實在是難用。所以推薦大家用第三方的pl/sql developer,百度一下就能找到和註冊碼。這個軟體第一次啟動的介面如下:
但是如果輸入scott/tiger@orcl,並不能正確串連
因為我們還沒有配置tnsnames.ora檔案(這個可以理解為web.config或machine.config,用於儲存本機oracle client端的所有串連資訊,只有正確配置以後,oracle client才能正確串連oracle db server)進入 %oracle_home%\Network\Admin\Sample(注:%oracle_home%指oracle用戶端安裝後的根目錄) 找到tnsnames.ora檔案,把它複製到%oracle_home%\Network\Admin\下用記事本開啟,參照下面修改:# Every line that begins with # is a comment line
#
# Create Oracle net service names, or aliases, for each database server
# you need to connect to.
#
# TNSNames.ora sample entry
#
# alias =
#  (DESCRIPTION =
#    (ADDRESS = (PROTOCOL = TCP)(HOST = myserver.mycompany.com)(PORT = 1521))
#    (CONNECT_DATA =
#      (SERVER = DEDICATED)
#      (SERVICE_NAME = orcl)
#    )
#  )
#
# You can modify the entry below for your own database.
# <data source alias> = Name to use in the connection string Data Source
# <hostname or IP> = name or IP of the database server machine
# <port> = database server machine port to use
# <database service name> = name of the database service on the serverlocal =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
解釋一下:local是自己定義的名稱,可以隨便改,只要不重複就行了,host後面的部分是伺服器ip地址,port是連接埠號碼,SERVICE_NAME是oracle server安裝時的執行個體命名,修改完成後,儲存。再次開啟pl/sql,會發現database下拉框裡多出了一個local,如:使用者名稱輸入scott,密碼輸入tiger,選擇local,登入,成功!

三、.net與oracle的串連這是初學者最頭痛的問題,oracle有4種方式可供.net串連3.1 古老的ODBC資料來源串連先開啟"Microsoft ODBC管理員",如
會看到設定介面
在vs2010的server explorer面板中,建立一個connection選擇Change,再選擇ODBC資料來源接下來的事情,大家照提示來就行了,不過我測試發現,ODBC方式在vs.net 2010/win2008 r2下,始終串連不上,但是在控制台的資料來源裡,test connection是成功的。箇中原因,也許只有微軟知道,所以這種方式我是沒實踐成功,放棄!反正odbc這種老古董我也不喜歡。3.2 微軟內建的System.Data.OracleClient同樣,server explorer面板中,add 一個connection,在出來的介面中,選擇change,切換成輸入使用者名稱和密碼後,就能串連成功。特別提醒:自從oracle官方推出for .net的用戶端後,微軟就宣告在未來的.net版本中,將移除System.Data.OracleClient命名空間,不再提供微軟版的oracle client! 詳情見:http://go.microsoft.com/fwlink/?LinkID=144260除非你的項目將來不打算升級,否則不建議大家用這種方式。為了引用System.Data.OracleClient,需要添加對System.Data.OracleClient.dll的引用,預設是在C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0目錄下添加引用成功後,就能用下面的代碼進行查詢了:

using System;using System.Data.OracleClient;namespace Sample{    class Program    {        static void Main(string[] args)        {            string connString = "Data Source=local;Persist Security Info=True;User ID=scott;Password=tiger;Unicode=True";            using (OracleConnection conn = new OracleConnection(connString))             {                OracleCommand cmd = new OracleCommand("select * from emp", conn);                conn.Open();                OracleDataReader dr =  cmd.ExecuteReader();                while (dr.Read())                 {                    Console.WriteLine("{0}\t{1}", dr[0].ToString(), dr[1].ToString());                }                dr.Close();            }            Console.ReadLine();        }    }}
3.3 oledb方式連接字串為
Provider=MSDAORA;Data Source=local;Persist Security Info=True;User ID=scott;Password=tiger範例程式碼:
using System;using System.Data.OleDb;namespace Sample{    class Program    {        static void Main(string[] args)        {            string connString = "Provider=MSDAORA;Data Source=local;Persist Security Info=True;User ID=scott;PassWord=tiger";            using (OleDbConnection conn = new OleDbConnection(connString))            {                OleDbCommand cmd = new OleDbCommand("select * from emp", conn);                conn.Open();                OleDbDataReader dr = cmd.ExecuteReader();                while (dr.Read())                {                    Console.WriteLine("{0}\t{1}", dr[0], dr[1]);                }                dr.Close();            }            Console.ReadLine();        }    }}
3.4 Oracle官方的ODP.Net連接字串為 DATA SOURCE=local;PERSIST SECURITY INFO=True;USER ID=SCOTT;Password=tiger要使用ODP.Net,必須先添加對Oracle.DataAccess.dll的引用,該檔案位於%Oracle_Home%\11.2.0\odp.net\bin\4下範例程式碼如下:
using System;using Oracle.DataAccess.Client;using System.Data;using System.Data.Common;namespace Sample{    class Program    {        static void Main(string[] args)        {            string connString = "DATA SOURCE=local;PERSIST SECURITY INFO=True;USER ID=SCOTT;Password=tiger";            string ProviderName = "Oracle.DataAccess.Client";            DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);            using (DbConnection conn = factory.CreateConnection())            {                conn.ConnectionString = connString;                conn.Open();                DbCommand cmd = conn.CreateCommand();                cmd.CommandText = "select * from emp";                cmd.CommandType = CommandType.Text;                DbDataReader dr = cmd.ExecuteReader();                while (dr.Read())                {                    Console.WriteLine("{0}\t{1}", dr[0], dr[1]);                }                dr.Close();            }            Console.ReadLine();        }    }}
為了測試這三種方式(ODBC不考慮)的效能,簡單寫了一段代碼測試了一下:
using System;using Oracle.DataAccess.Client;using System.Data;using System.Data.OleDb;using System.Data.Common;using System.Diagnostics;using MSOracle = System.Data.OracleClient;namespace Sample{    class Program    {        static void Main(string[] args)        {            string temp = "";            string connString = "DATA SOURCE=local;PERSIST SECURITY INFO=True;USER ID=SCOTT;Password=tiger";            string ProviderName = "Oracle.DataAccess.Client";            DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);            int max = 5000;            Stopwatch sw = new Stopwatch();            sw.Start();            for (int i = 0; i < max; i++)            {                using (DbConnection conn = factory.CreateConnection())                {                    conn.ConnectionString = connString;                    conn.Open();                    DbCommand cmd = conn.CreateCommand();                    cmd.CommandText = "select * from emp";                    cmd.CommandType = CommandType.Text;                    DbDataReader dr = cmd.ExecuteReader();                    while (dr.Read())                    {                        //Console.WriteLine("{0}\t{1}", dr[0], dr[1]);                        temp = dr[0].ToString();                    }                    dr.Close();                    //Console.WriteLine("第{0}次\t----------------------------------------", i);                }            }            sw.Stop();            Console.WriteLine("Oracle.DataAccess.Client\t{0}次耗時:{1}毫秒", max, sw.ElapsedMilliseconds);            string connString2 = "Provider=MSDAORA;Data Source=local;Persist Security Info=True;User ID=scott;PassWord=tiger";            sw.Reset();                        sw.Start();            for (int i = 0; i < max; i++)            {                using (OleDbConnection conn =new OleDbConnection(connString2))                {                                        conn.Open();                    OleDbCommand cmd = new OleDbCommand("select * from emp", conn);                                       OleDbDataReader dr = cmd.ExecuteReader();                    while (dr.Read())                    {                        //Console.WriteLine("{0}\t{1}", dr[0], dr[1]);                        temp = dr[0].ToString();                    }                    dr.Close();                    //Console.WriteLine("第{0}次\t----------------------------------------", i);                }            }            sw.Stop();            Console.WriteLine("System.Data.OleDb\t{0}次耗時:{1}毫秒", max, sw.ElapsedMilliseconds);            string connString3 = "Data Source=local;Persist Security Info=True;User ID=scott;Password=tiger;Unicode=True";            sw.Reset();            sw.Start();            for (int i = 0; i < max; i++)            {                using (MSOracle.OracleConnection conn = new MSOracle.OracleConnection(connString3))                {                    conn.Open();                    MSOracle.OracleCommand cmd = new MSOracle.OracleCommand("select * from emp", conn);                    MSOracle.OracleDataReader dr = cmd.ExecuteReader();                    while (dr.Read())                    {                        //Console.WriteLine("{0}\t{1}", dr[0], dr[1]);                        temp = dr[0].ToString();                    }                    dr.Close();                    //Console.WriteLine("第{0}次\t----------------------------------------", i);                }            }            sw.Stop();            Console.WriteLine("System.Data.OracleClient\t{0}次耗時:{1}毫秒", max, sw.ElapsedMilliseconds);            Console.ReadLine();        }    }}

運行結果:

Oracle.DataAccess.Client        5000次耗時:4711毫秒
System.Data.OleDb       5000次耗時:53684毫秒
System.Data.OracleClient        5000次耗時:8436毫秒

相信大家知道如何選擇了吧,果然還是Oracle官方更熟悉自己的產品。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.