天天看點

ADO.Net對Oracle資料庫的操作【轉載】

一 ADO.Net簡介

通路資料庫的技術有許多,常見的有一下幾種:開放資料庫互聯(ODBC)、資料通路對象(DAO)、遠端資料對象 (RDO)、 ActiveX資料對象(ADO)。我們今天主要要學習ADO.NET中OracleClient命名空間中的幾個常用對象,用這作為對ADO.NET認 識學習的開始。

ADO與ADO.NET既有相似也有差別,他們都能夠編寫對資料庫伺服器中的資料進行通路和操作的應用程式,并且易于使 用、高速度、低記憶體支出和占用磁盤空間較少,支援用于建立基于用戶端/伺服器和 Web 的應用程式的主要功能。但是ADO使用OLE DB接口并基于微軟的COM技術,而ADO.NET擁有自己的ADO.NET接口并且基于微軟的.NET體系架構。衆所周知.NET體系不同于COM體 系,ADO.NET接口也就完全不同于ADO和OLE DB接口,這也就是說ADO.NET為.NET構架提供了優化的資料通路模型,和基于COM的ADO是完全兩樣的資料通路方式。

ADO.NET是一組通路資料源的面向對象的類庫。簡單的了解,資料源就是資料庫,它同時也能夠是文本檔案、Excel 表格或者XML檔案。ADO.NET裡包括了許多專門用于和資料打交道的對象。下面介紹了一些最常用的對象。這些對象是學習ADO.NET必須了解的。掌 握它們後我們将了解使用ADO.NET和資料打交道需要考慮哪些事情。

OracleConnection 對象

要通路一個資料源,你必須先建立一個到它的連接配接。這個連接配接裡描述了資料庫伺服器類型、資料庫名字、使用者名、密碼,和連接配接資料庫所需要的其它參數。command對象通過使用connection對象來知道是在哪個資料庫上面執行ORACLE指令。

ADO.Net對Oracle資料庫的操作【轉載】

OracleConnection oracleConn = new OracleConnection();

ADO.Net對Oracle資料庫的操作【轉載】

oracleConn.ConnectionString = "User Id=scott;Password=tiger;

ADO.Net對Oracle資料庫的操作【轉載】

                                     Data Source=oracleSN;";

ADO.Net對Oracle資料庫的操作【轉載】

oracleConn.Open();

ADO.Net對Oracle資料庫的操作【轉載】

OracleCommand對象

連接配接資料庫後就可以開始想要執行的資料庫操作,這個是通過command對象完成,command對象一般被用來發送ORACLE語句給資料庫。command對象通過connection對象得知道應該與哪個資料庫進行連接配接。我們既可以用command對象來直接執行ORACLE指令,也可以将一個command對象的引用傳遞給OracleDataAdapter,OracleDataAdapter能包含一系列的command對象,可以處理大量資料。

ADO.Net對Oracle資料庫的操作【轉載】

public void ReadMyData(string connectionString)

ADO.Net對Oracle資料庫的操作【轉載】

{

ADO.Net對Oracle資料庫的操作【轉載】

    string queryString = "SELECT EmpNo, DeptNo FROM Scott.Emp";

ADO.Net對Oracle資料庫的操作【轉載】

    OracleConnection connection = new OracleConnection(connectionString)

ADO.Net對Oracle資料庫的操作【轉載】

    {

ADO.Net對Oracle資料庫的操作【轉載】

        OracleCommand command = new OracleCommand(queryString, connection);

ADO.Net對Oracle資料庫的操作【轉載】

        connection.Open();

ADO.Net對Oracle資料庫的操作【轉載】

        OracleDataReader reader = command.ExecuteReader();

ADO.Net對Oracle資料庫的操作【轉載】

        try

ADO.Net對Oracle資料庫的操作【轉載】

        {

ADO.Net對Oracle資料庫的操作【轉載】

            while (reader.Read())

ADO.Net對Oracle資料庫的操作【轉載】

            {

ADO.Net對Oracle資料庫的操作【轉載】

                Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetInt32(1));

ADO.Net對Oracle資料庫的操作【轉載】

            }

ADO.Net對Oracle資料庫的操作【轉載】

        }

ADO.Net對Oracle資料庫的操作【轉載】

        finally

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

            reader.Close();

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

    }

ADO.Net對Oracle資料庫的操作【轉載】

}

ADO.Net對Oracle資料庫的操作【轉載】

OracleDataReader對象

許多資料庫操作要求我們僅僅隻是需要讀取一組資料。這時候就用到了data reader對象。通過data

reader對象,我們可以獲得從command對象的SELECT語句得到的結果。考慮到性能方面的因素,data

reader傳回的資料流被設計為隻讀的、單向的,這将意味着你隻能按照一定的順序從資料流中取出資料。雖然你在這裡也獲得了性能上的提升,但是缺點也是

明顯的,不能夠操作取回資料,如果需要操作編輯資料,解決的辦法是使用DataSet。

OracleDataReader提供了幾個方法,在讀取資料的時候用這些方法可以對資料表中的資料按資料類型進行篩選:GetDateTime, GetDouble, GetGuid, GetInt32。

DataSet對象

DataSet對象用于表示那些儲存在記憶體中的資料。它包括多個DataTable對象,DataTable就象一個普

通的資料庫中的表一樣,也有行和列,我們甚至能夠通過定義表和表之間的關系來建立從屬關系。DataSet主要用于管理存儲在記憶體中的資料以及對資料的斷

開操作。注意,由于DataSet對象能被所有Data Providers(資料源互動的類庫)使用,它不需要指定字首。

OracleDataAdapter對象

某些時候我們隻需要讀資料,并且你不需要修改它們把更改寫回資料源。但是還有這樣一些情況為了減少資料庫調用的次數,我

們把資料緩存在記憶體中。Data

adapter通過斷開模型來輕松的實作了後面這種情況的處理。當批量完成的對資料庫的讀寫操作的并将改變寫回資料庫的時候,data adapter

會填充(fill)DataSet對象。data adaapter裡包含了connection對象,當對資料源進行讀取或者寫入的時候,data

adapter會自動的打開或者關閉連接配接。此外,data

adapter還包含對資料的SELECT,INSERT,UPDATE和DELETE操作的command對象引用。如果我們為DataSet中的每一

個table都指定data adapter,它将會幫你處理好所有與連接配接處理資料庫的操作,我們所需要做的僅僅就是告訴data

adapter什麼時候讀取或者寫入到資料庫。

二用C# 寫一個連接配接資料庫程式的步驟

在程式中要使用 System.Data.OracleClient 命名空間中類的子集來對Oracle資料庫操作的步驟:

1、 将 System.Data.OracleClient(用于Oracle 的 Microsoft .NET 架構資料提供程式)的引用添加到項目中。

2、   使用 using 指令導入 OracleClient 類中的類型。

using System.Data.OracleClient;

3、建立一個 OracleConnection 對象。

ADO.Net對Oracle資料庫的操作【轉載】

OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");

4、建立一個 OracleCommand 對象。将其 Connection 屬性設定為上一步中建立的連接配接。将其 CommandText 設定為想對資料庫表進行的操作,即SQL語句。

ADO.Net對Oracle資料庫的操作【轉載】

OracleCommand cmd = new OracleCommand();

ADO.Net對Oracle資料庫的操作【轉載】

cmd.Connection = conn;

ADO.Net對Oracle資料庫的操作【轉載】

cmd.CommandText = "select * from table";

ADO.Net對Oracle資料庫的操作【轉載】

5、建立OracleParameter 對象,并将其添加到 OracleCommand 對象的參數集合中。(如果CommandText中有參數,需要建立此對象)

ADO.Net對Oracle資料庫的操作【轉載】

cmd.Parameters.Add("reccount",OracleType.Number);

6、   如果您要浏覽操作的結果集,請建立 DataSet、DataTable 或 DataReader。。

7、   使用 OracleCommand 對象的一個 Execute 方法執行CommandText中的SQL語句,如下所示:

ADO.Net對Oracle資料庫的操作【轉載】

conn.Open();

ADO.Net對Oracle資料庫的操作【轉載】

cmd.ExecuteNonQuery();

ADO.Net對Oracle資料庫的操作【轉載】

conn.Close();

ADO.Net對Oracle資料庫的操作【轉載】

Execute方法      說明

ExecuteReader   通過執行能夠傳回結果集生成 OracleDataReader。

ExecuteNonQuery     執行傳回受影響的行數。

ExecuteOracleNonQuery針對OracleCommand.Connection執行SQL語句,傳回受影響的行數。

ExecuteScalar    執行一個查詢并且傳回查詢結果集第一行第一列的值作為 .NET 架構資料類型傳回。

ExecuteOracleScalar執行一個查詢并且傳回查詢結果集的第一行第一列的值作為Oracle指定類型(OracleType 資料類型)傳回。

三 詳細操作總結

1.資料庫連接配接有2種:

    第一種:古老的方法(較為死闆,不利于靈活操作),即用OracleConnection的類來連接配接

ADO.Net對Oracle資料庫的操作【轉載】

string myOraclestr ="user id = xal;data source = xal;password = xal";

ADO.Net對Oracle資料庫的操作【轉載】

OracleConnection mycnn = new OracleConnection(myOraclestr);

ADO.Net對Oracle資料庫的操作【轉載】

mycnn.open();

ADO.Net對Oracle資料庫的操作【轉載】

第二種:新式的方法(使用較為靈活),即利用OracleConnectoinStringBuilder類來連接配接

ADO.Net對Oracle資料庫的操作【轉載】

OracleConnectionStringBuilder OcnnStrB = new OracleConnectionStringBuilder();

ADO.Net對Oracle資料庫的操作【轉載】

OCnnStrB.DataSource = "xal";

ADO.Net對Oracle資料庫的操作【轉載】

OCnnStrB.UserID = "xal";

ADO.Net對Oracle資料庫的操作【轉載】

OCnnStrB.Password = "xal";

ADO.Net對Oracle資料庫的操作【轉載】

OracleConnection myCnn = new OracleConnection(OCnnStrB.ConnectionString);

ADO.Net對Oracle資料庫的操作【轉載】

myCnn.open();

ADO.Net對Oracle資料庫的操作【轉載】

2. 資料庫表的操作   

2.1資料庫表的查詢、添加、删除和修改。

ADO.Net對Oracle資料庫的操作【轉載】

string Oraclestr = "select name from telephonebook "; 

ADO.Net對Oracle資料庫的操作【轉載】

OracleDataAdapter myoadapt = new OracleDataAdapter(Oraclestr, myConnection);

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

string Oraclestr = "delete from telephonebook"; 

ADO.Net對Oracle資料庫的操作【轉載】

OracleCommand myocmd = new OracleCommand(Oraclestr, myConnection);

ADO.Net對Oracle資料庫的操作【轉載】

myocmd.ExecuteNonQuery();

ADO.Net對Oracle資料庫的操作【轉載】

       第三種:利用OracleCommand的CommandText屬性

ADO.Net對Oracle資料庫的操作【轉載】

 OracleCommand myConnection = new OracleCommand();

ADO.Net對Oracle資料庫的操作【轉載】

 Comm.Connection = myConnection;

ADO.Net對Oracle資料庫的操作【轉載】

 Comm.Transaction = myConnection.BeginTransaction();

ADO.Net對Oracle資料庫的操作【轉載】

 Comm.CommandText = "select * from table";

ADO.Net對Oracle資料庫的操作【轉載】

 Comm.ExecuteNonQuery();

ADO.Net對Oracle資料庫的操作【轉載】

 Comm.Transaction.Commit();

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

string Oraclestr = "select name from telephonebook ";

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

DataTable mydtable = new DataTable();

ADO.Net對Oracle資料庫的操作【轉載】

myoadapt.Fill(mydtable);

ADO.Net對Oracle資料庫的操作【轉載】

foreach (DataRow dr in mydtable.Rows)

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

     comboBox1.Items.Add(dr[0].ToString());

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

           資料庫事務是指作為單個邏輯工作單元執行的一系列操作。

  設想網上購物的一次交易,其付款過程至少包括以下幾步資料庫操作:

    •更新客戶所購商品的庫存資訊

    •儲存客戶付款資訊--可能包括與銀行系統的互動

    •生成訂單并且儲存到資料庫中

    •更新使用者相關資訊,例如購物數量等等

     

正常的情況下,這些操作将順利進行,最終交易成功,與交易相關的所有資料庫資訊也成功地更新。但是,如果在這一系列過程中任何一個環節出了差錯,例如在更

新商品庫存資訊時發生異常、該顧客銀行帳戶存款不足等,都将導緻交易失敗。一旦交易失敗,資料庫中所有資訊都必須保持交易前的狀态不變,比如最後一步更新

使用者資訊時失敗而導緻交易失敗,那麼必須保證這筆失敗的交易不影響資料庫的狀态--庫存資訊沒有被更新、使用者也沒有付款,訂單也沒有生成。否則,資料庫的

資訊将會一片混亂而不可預測。

  資料庫事務正是用來保證這種情況下交易的平穩性和可預測性的技術。

ADO.Net對Oracle資料庫的操作【轉載】

//連接配接資料庫并打開

ADO.Net對Oracle資料庫的操作【轉載】

string myConnString = "user id=xal;data source=xal2;password=xal"; 

ADO.Net對Oracle資料庫的操作【轉載】

OracleConnection myConnection = new OracleConnection(myConnString);

ADO.Net對Oracle資料庫的操作【轉載】

myConnection.Open();

ADO.Net對Oracle資料庫的操作【轉載】

ADO.Net對Oracle資料庫的操作【轉載】

      //建立事務

ADO.Net對Oracle資料庫的操作【轉載】

       OracleTransaction myTransaction = myConnection.BeginTransaction();

ADO.Net對Oracle資料庫的操作【轉載】

       OracleCommand myocmd = new OracleCommand("", myConnection);

ADO.Net對Oracle資料庫的操作【轉載】

       myocmd.Transaction = myTransaction;

ADO.Net對Oracle資料庫的操作【轉載】

       try

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

             //語句塊

ADO.Net對Oracle資料庫的操作【轉載】

               myTransaction.Commit();

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

        catch (Exception ex)

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

              MessageBox.Show(ex.Message);

ADO.Net對Oracle資料庫的操作【轉載】

               myTransaction.Rollback();

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

              myConnection.Close();

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

     }

ADO.Net對Oracle資料庫的操作【轉載】

2.4從資料表中讀取圖檔資料

從資料庫中取一個圖檔資料,用二進制數組來存儲,然後将其顯示在指定的控件上。

ADO.Net對Oracle資料庫的操作【轉載】

byte[] tmpImage = (byte[])curRow["Pic"];

ADO.Net對Oracle資料庫的操作【轉載】

// fileLength是數組的長度(圖檔的大小)和curImageFormat圖檔格式。

ADO.Net對Oracle資料庫的操作【轉載】

fileLength = tmpImage.Length;

ADO.Net對Oracle資料庫的操作【轉載】

MemoryStream curStream = new MemoryStream(tmpImage);

ADO.Net對Oracle資料庫的操作【轉載】

picPersonel.Image = Image.FromStream(curStream);

ADO.Net對Oracle資料庫的操作【轉載】

curImageFormat = picPersonel.Image.RawFormat;

ADO.Net對Oracle資料庫的操作【轉載】

2.5 指令參數的建立和使用

建立指令參數

ADO.Net對Oracle資料庫的操作【轉載】

private OracleParameter CreateOraParam(string ParamName, object ParamValue)

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

    OracleParameter Result = new OracleParameter();

ADO.Net對Oracle資料庫的操作【轉載】

     Result.ParameterName = ParamName;

ADO.Net對Oracle資料庫的操作【轉載】

     if (ParamValue != null)

ADO.Net對Oracle資料庫的操作【轉載】

      {

ADO.Net對Oracle資料庫的操作【轉載】

           Result.Value = ParamValue;

ADO.Net對Oracle資料庫的操作【轉載】

      }

ADO.Net對Oracle資料庫的操作【轉載】

      else

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

           Result.Value = DBNull.Value;

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

      Result;

ADO.Net對Oracle資料庫的操作【轉載】
ADO.Net對Oracle資料庫的操作【轉載】

這樣的話,當要對資料庫操作時就可以運用了:

ADO.Net對Oracle資料庫的操作【轉載】

insertComm.CommandText = "insert into TESTADODOTNET (ID) values (:pID)";

ADO.Net對Oracle資料庫的操作【轉載】

insertComm.Parameters.Add(CreateOraParam("pID", (txtID.Text.Trim() != "") ? txtID.Text.Trim() : null));