使用 ODP.NET 訪問 Oracle(.net如何訪問Oracle)詳解

來源:互聯網
上載者:User

1,什麼是ODF .NE,?就是Oracle 為 .NET (ODP.NET) 專門編寫了 Oracle Data Provider,一個用於 Microsoft .NET 環境下的 Oracle 資料訪問 API 。

詳細解說 http://www.oracle.com/technetwork/cn/testcontent/o23odp-084525-zhs.html 對於官方的代碼,已不存在了!

ODP.NET你不需要安裝Oracle,不需要配置oracle.key檔案,不需要配置TnsNames.Ora檔案 不需要配置環境變數;完全的傻瓜式的在沒有安裝oracle資料庫或者

用戶端等任何oracle的產品的機器去訪問Oracle資料庫!

下面詳細解說ODP.NET如何對Oracle的資料操作【可以完成建表,CURD( 增刪查改)】

步驟一:擷取支援資料庫連接的類庫檔案:Oracle.DataAccess.dll 如何擷取呢?

到官網去相應的版本http://www.oracle.com/technetwork/cn/topics/dotnet/index-088718-zhs.html

要跑64位的.Net程式,就必須用64位的odp.net,要跑32位的.Net程式,就必須用32位的odp.net,最後給出odp.net32位與64位的:64位http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html32位http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html

下載後安裝後會在你的安裝目錄\DP.NET\BIN\2.X(圖1)下出現這個Oracle.DataAccess.dll,把它複製到你的解決方案下 引用一下

圖1

順便點擊一下Oraprovcfg.exe 自動設定了環境變數(圖2)

圖2

 成功擷取所要的dll檔案,有些人還要去一個檔案的去解壓,去配置,我看不需要,如需要的話這個是詳細的配置步驟

http://blog.csdn.net/Sunlihgt_love/article/details/5423926

步驟二:在正式使用之前,需要在項目中添加引用:

Oracle.DataAccess.Client 設定資料庫的串連等等通用功能,

Oracle.DataAccess.Types  設定 oracle自訂的一些資料類型

步驟三:執行個體解說

如提供以下資料庫的資訊

資料庫伺服器地址:192.168.10.20
庫名:44410g242
帳號:44bikll
密碼:487gf,.q

串連oracle的字串就是這樣的(提供我測試的2種方式)

//string conString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.20)(PORT=1521))" +
           //"(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = 44410g242)));User Id=44bikll;Password=487gf,.q;"; 

            string conString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.20)(PORT=1521))" +
              "(CONNECT_DATA=(SID=44410g242)));User Id=44bikll;Password=487gf,.q;";  
            //寫串連串以上2方法串連都可以,也可以放到Web.Config中。 

 以上的連線協定TCP和連接埠1521都是預設的 ,無需修改,如連接埠被佔用了就需要改下。

本案例中涉及2個表TBLOCKLOG和TBACCOUNT

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Oracle.DataAccess.Client;using Oracle.DataAccess.Types;namespace DHH_Bill_TBLockLog{    class Program    {                static void Main(string[] args)        {            #region 測試資料庫              Console.WriteLine("擷取testid031使用者在2013-4-11 15:53:40到2013-04-12 00:00:00的消費清單");            Console.WriteLine();            string conString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.10.20)(PORT=1521))" +              "(CONNECT_DATA=(SID=44410g242)));User Id=44bikll;Password=487gf,.q;"; //這個也可以放到Web.Config中。                          //執行個體化OracleConnection對象             try            {                using (OracleConnection conn = new OracleConnection(conString))                {                    conn.Open();                    string sql = "select TBACCOUNT.username,TBLOCKLOG.accountid,TBLOCKLOG.amount,TBLOCKLOG.locktime  FROM TBLOCKLOG,TBACCOUNT WHERE TBLOCKLOG.accountid=TBACCOUNT.accountid  ";                    sql += " and TBLOCKLOG.serviceid=1 and TBACCOUNT.username='testid031' and TBLOCKLOG.status=1 and TBLOCKLOG.locktime >= to_date('2013-4-11 13:53:40','yyyy-mm-dd hh24:mi:ss') and TBLOCKLOG.locktime <= to_date('2013-04-12 00:00:00','yyyy-mm-dd hh24:mi:ss') order by TBLOCKLOG.locktime";                                        using (OracleCommand comm = new OracleCommand(sql, conn))                    {                                                using (OracleDataReader rdr = comm.ExecuteReader())                        {                                                       while (rdr.Read())                            {                                Console.WriteLine("UserName:" + rdr.GetString(0) + ",UserId:" + rdr.GetInt32(1) + ",點數:" + rdr.GetInt32(2) + "," + rdr.GetDateTime(3));                            }                                                   }                    }                }            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);            }            #endregion             Console.WriteLine(); Console.WriteLine();            Console.WriteLine("計算2013-4-11 15:53:40到2013-04-12 00:00:00時間的testid031使用者消費的amount的總和");                        Console.WriteLine(GetBillByDateAndGameId(conString, "testid031", 1, Convert.ToDateTime("2013-4-11 13:53:40"), Convert.ToDateTime("2013-04-12 00:00:00")));                   }        public static int GetBillByDateAndGameId(string conString,string accountId, int gameId, DateTime beginTime, DateTime endTime)        {            try            {                using (OracleConnection conn = new OracleConnection(conString))                {                    accountId = accountId.ToLower();//全部轉換為小寫                    conn.Open(); string sql = "select sum(TBLOCKLOG.amount) sumamount FROM TBLOCKLOG,TBACCOUNT WHERE TBLOCKLOG.accountid=TBACCOUNT.accountid  ";                    sql += " and TBLOCKLOG.serviceid=" + gameId + " and TBACCOUNT.username='" + accountId + "' and TBLOCKLOG.status=1 and TBLOCKLOG.locktime >= to_date('" + beginTime + "','yyyy-mm-dd hh24:mi:ss') and TBLOCKLOG.locktime <= to_date('" + endTime + "','yyyy-mm-dd hh24:mi:ss') order by TBLOCKLOG.locktime";                                     using (OracleCommand comm = new OracleCommand(sql, conn))                    {                        using (OracleDataReader rdr = comm.ExecuteReader())//建立一個OracleDateReader對象                        {                            int sum = 0;                            while (rdr.Read())//讀取資料,如果odr.Read()返回為false的話,就說明到記錄集的尾部了                            {                                if (rdr.GetOracleValue(0).ToString() == "null")//防止為空白                                 {                                    sum = 0;                                }                                else                                {                                    sum = int.Parse(rdr.GetOracleValue(0).ToString());                                    //sum = int.Parse(rdr[0].ToString());                                }                                                           }                            return sum;                        }                    }                }            }            catch (Exception ex)            {                return -1;            }        }    }   }

View Code

顯示結果:

以下是: 1. 建立資料庫
           建立一個名為OracleTypesTable的表
           "create table OracleTypesTable (MyVarchar2 varchar2(3000),MyNumber number(28,4) Primary key ,MyDate           date,MyRaw RAW(255))";
           插入一行資料
          "insert into OracleTypesTable values ('test',4,to_date('2000-01-11
           12:54:01','yyyy-mm-dd hh24:mi:ss'),'0001020304')";

其他動作的說明:(使用說明:http://www.oracle.com/technetwork/cn/testcontent/o23odp-084525-zhs.html)

 注意:

1,案例中的sql語句還是和mssql有一點區別的;

2,統計的話如果擷取不到統計的資料的會報錯,這就是我為什麼加上if (rdr.GetOracleValue(0).ToString() == "null")//防止為空白 

3,WebSERVICE的時候不知道為什麼他對使用者名稱的大小寫也有區分。

步驟四:部署說明

 在部署到真實伺服器的時候,你也同樣按照步驟一中的步驟安裝用戶端ODP.NET檔案,點擊執行EXE檔案自動設定環境變數,查看一下是否安裝成功。

注意版本是否一致,這個是運行你的程式的關鍵,開啟cmd,執行:C:\Documents and Settings\Administrator>sqlplus /nolog 就可以知道版本

我的結果:

 

 以下找了很多與版本相關的文章---版本的問題  ODP.NET開發和部署的相關問題

http://www.cnblogs.com/yjmyzz/archive/2011/04/19/2020793.html  

http://www.cnblogs.com/codingsilence/archive/2011/07/14/2146497.html

http://blog.chinaunix.net/uid-20049824-id-1980177.html

 

補充 其中11.2.0.3.50 Beta的將更合適快速控制項目Oracle,但是需要win7和.NET Framework 4的支援,一般企業估計還沒有把win7當伺服器的吧! 

http://www.oracle.com/technetwork/database/windows/downloads/odpmbetainstall-1696475.html  

網上的這個http://www.bitscn.com/pdb/oracle/200904/160401.html Instant client大量安裝Oracle用戶端-

安裝配置還需要從安裝過Oracle的機器上拷貝oracle.key檔案還要配置環境變數。

就這麼多吧,希望對你有所協助。,下面是ODP.NET的dll

端午節快樂

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.