---下面是OracleClient
下面也要介紹的是通過 System.Data.OracleClient 來完成 ASP.NET 頁面訪問 Oracle 資料庫,
其實呢,還是比較簡單的,
首先介紹一下環境吧,
我機器裝的是 Oracle 10g R2 的版本,
要完成 ASP.NET 訪問 Oracle 事實上,對 Oracle 還是有一些設定的,
看下面的一個裡面的兩個檔案吧
在上面標識的兩個檔案中完成機器名,IP 位址這些的設定,
設定可按如下進行
設定好了以後便可以來實現通過 OracleClient 對 Oracle 資料庫的訪問了,
先來看串連 Oracle 的字串設定吧,
從上面可以看到,其實連接字串和連結 Access 或者是 Sql Server 是基本一樣的,
其中 Data Source 呢,就是指定資料庫名,當建立 Oracle 資料庫時指定的資料庫,
User ID 和 Password 就不要解釋了吧,
從中可以看出我是使用的 Oracle 的預定義使用者 scott 來訪問的,
設定好了連接字串後,便是寫一個頁面來訪問 Oracle 資料庫了,
頁面的準系統介紹如下,
第一次載入時便將 Oracle 資料庫中的資料載入到 DropDownList 中顯示,
並且呢,使用者可以通過選擇一個 DropDownList 中的使用者姓名來得到該使用者的所有資訊,
功能是很簡單的(因為主要是實現訪問 Oracle 資料庫嗎)
再看 Code-Behind 吧
以上呢就是 Code-Behind 部分了,其實呢,除了一些調用的方法不同外,
基本上就是使用 ADO.NET 訪問 Sql Server 啦,
然後就是看效果了,
再來看 Oracle 吧,
因為我是使用的 SCOTT 使用者來訪問的 Oracle ,而 Oracle 呢在安裝的時候會自動建立一個 Emp 表,
上面的這個 Demo 就是通過 SCOTT 使用者來訪問這個 EMP 資料表的,
從上面就可以看出這個 Emp 表的結構了,
然後再來看一下裡面的資料吧,
也來查看一下使用者 WARD 的基本資料吧,
從上面這幅中便可以得到上面通過 ASP.NET 頁面的資料了,可以看到資料是一樣的,
---下面是odbc,
說實在的,使用 OracleClient ,Oledb ,Odbc 訪問 Oracle 資料庫,
都比較簡單,無非就是注意一下這個資料庫連接字串就 OK 了,
下面就給出資料庫連接字串吧
然後再來看 Demo 的 Code-Behind
很簡單的一個 Demo ,就是使用 ODBC 從 Oracle 資料庫中訪問 EMP 資料表,
然後將這個表中的資料全部取出,並且綁定到一個 GridView 上面顯示就 OK 了,
效果就是
到這裡,便成功取得了 Oracle 中的資料了!!!
---下面是oledb,
好像微軟宣稱從 .NET 4.0 開始將放棄對 OracleClient 的支援,
所以接下來的博文還是會介紹更多的 .NET 訪問 Oracle 資料庫的方法,
其實訪問 Oracle 資料庫有很多種方法,比如使用 ODBC 實現,
或者是 OracleClient 實現,或者是 Oledb 實現,
又或者是通過 Oracle 給出的 Oracle Data Provider for .NET (ODP.NET) 來完成,
至於最後一個 ODP.NET 的話,必須另外加 Oracle 提供的組件了,
還有一個比較有趣的東西就是可以通過 Oracle 提供的 Oracle Developer Tools for Visual Studio,
這個東西您安裝以後,就可以像 Sql Server 一樣,在 Visual Studio 中直接存取 Oracle 資料庫了,
不過這一篇博文還先只介紹 Oledb 吧,
由易到難,到後面再介紹其他的一些訪問 Oracle 資料庫的方法,
其實使用 Oledb 訪問 Oracle 資料庫很簡單的,和上一篇博文中使用 OracleClient 訪問一樣,
只是在一些基本的方法和類上不一樣而已,而後就是串連資料庫的連接字串稍微有一點變化,
還有值得一提的是,在 OracleClient 訪問 Oracle 資料庫時,
不需要太多 Oracle 資料庫中的資料類型,
因為在 OracleClient 中都有專門針對 Oracle 資料庫中類型的一些擷取值的方法,
例如
而在 Oledb 中訪問 Oracle 時,就必須控制好資料類型的轉換,
例如
下面就來看 Demo 了,
先看一下連接字串吧
這個 Demo 實現的功效和前一篇使用 OracleClient 訪問 Oracle 資料庫時 Demo 的效果是一樣的,
也是通過 SCOTT 使用者登入,然後訪問資料庫中的 EMP 資料表,得到資料,
從上面可以看到其實這個 Demo 和上一個 Demo 真的沒有什麼變化,
Visual Studio 來串連 Oracle
首先還是先來看一下我的一些環境吧,
作業系統是 Win 7 旗艦版,
Oracle 版本為 Oracle 10g R2 ,
Visual Studio 為 Visual Studio 2008,
前面介紹的呢都是通過手工編寫 Oracle 資料庫連接字串來完成的訪問 Oracle 資料庫,
其中介紹了 OracleClient ,Oledb ,ODBC 這三類方法,
其實呢,對 Oracle 的操作並沒有想象中的那麼複雜,
尤其是當 Oracle 公司提供了在 Visual Studio 下的一些外掛程式的使用下就顯得更加容易了,
這使得您在 VS 下對 Oracle 的操作有些類似於對 Sql Server 的操作了,
其實呢,VS 對 Oracle 的訪問有三種資料提供者,
一種是:用於 Oracle 的 .NET Framework 資料提供者
一種是:用於 OLEDB 的 .NET Framework 資料提供者
一種是:Oracle Data Provider for .NET
其中第三種呢,您必須先安裝由 Oracle 提供的 ODP.NET 才能夠實現訪問,
這個呢將會在後面的博文中介紹,
必須要提及的是,您要完成在 VS 中訪問 Oracle 資料庫的話,
你必須先將 Oracle 資料庫配置好,
常見的一些配置錯誤主要是對
D:\oracle\product\10.2.0\db_1\network\ADMIN
這個目錄下的兩個檔案的配置
這兩個檔案的配置至關重要,其中 listener.ora 是使用者指定監聽服務的一些資訊的,
如果這個檔案設定不正確的話,將有可能導致監聽服務無法啟動,
簡單起見,直接把裡面的東西截個圖吧,
主要是要將 HOST 設定好,
而後就是要配置好 tnsnames.ora
這個檔案也非常重要,其直接涉及到您的 VS 或者是應用程式能否訪問到 Oracle 資料庫,
其中的設定說明是,HOST 用來指定 Oracle 伺服器所在的主機名稱或者 IP 位址,
而 SERVICE_NAME 則指定全域資料庫名,
一般來說,經過下面兩個步驟就可以判斷出您的上面的兩個檔案是否設定正確了,
首先是您設定好上面的兩個檔案以後,您就重新啟動監聽服務,
如果監聽服務能夠正常啟動的話,說明設定檔 listener.ora 配置基本正確,
而後的話,您可以通過 tnsping 資料庫名 來判斷 tnsnames.ora 的配置是否正確,
比如我的全域資料庫名為 Oracle ,
我就通過 tnsping Oracle 來判斷 tnsnames.ora 的配置是否正確,
如果得到上面的類似結果,則說明這個設定檔時正確的,
現在就來看前面的兩種方式吧,
然後我建立一個串連
更改資料來源(先使用”使用者 Oracle 的 .NET Framework 資料提供者”)
其中 Oracle 是用來指定要串連的 Oracle 資料庫的名字的
完成後可以看到
下面就來看一個 Demo 來對上面的設定進行一個測試
Demo 很簡單就是一個頁面上放一個 GridView ,
然後將 Oracle.SCOTT 中的 EMP 表中的資料全部綁定上去進行顯示,
直接看效果就可以了
---------------------------------------------華麗的分隔線-----------------------------------------
---------------------------------------------華麗的分隔線-----------------------------------------
---------------------------------------------華麗的分隔線-----------------------------------------
上面呢是介紹了使用資料提供者中的第一種完成訪問 Oracle 的任務,
而後就是要介紹 用於 OLEDB 的 .NET Framework 資料提供者了
和前面一樣,先添加一個與 Oracle 資料庫的串連,
只不過這次使用的資料提供者時 用於 OLEDB 的 .NET Framework 資料提供者了
我仍然以 scott 使用者進行訪問 Oracle 資料庫,
串連成功後可以看到
再看一個 Demo 來實現通過這個資料庫的串連來訪問 Oracle 資料庫
這個 Demo 呢和上一個 Demo 沒有區別,都是通過訪問 Oracle 得到 EMP 表中的資料,
這裡就不做示範了,
---下面是ODP.NET 訪問 Oracle 資料庫要相使用 Oracle Data Provider For .NET(ODP.NET)
必須先安裝 ODP.NET 或者是 ODAC(Oracle Data Access Components)
(ODAC 中包含 ODP.NET 這個組件)
最好是把 ODT.NET 也安裝上,這樣,以後在 Visual Studio 中開發 Oracle 應用程式會方便很多的,
還是提供一個吧,
http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html
如果還沒有安裝的朋友請參考筆者前面的一些博文,其中都有比較好的介紹的,
本篇博文呢,將會完成一個 Demo ,這個 Demo 呢是從 Sql Server 中取出指定的資料表中的資料,
然後逐條將這些取出的資料插入到 Oracle 資料庫中的指定表中,
其中呢,對 Sql Server 資料庫的訪問我就不說了,
對 Oracle 的訪問呢,主要是通過 ODP.NET 來實現的,
前面的一篇博文<<通過 Reflector 工具來查看 ODP.NET 提供的類等資訊>>
介紹了ODP.NET 中的一些類和命名空間,
在這一篇博文中就是使用這些類來完成 Demo ,當然涉及的類將會是很簡單的最基本的類,
也就是 Connection,Command ,DataAdaptor 這些,
如果您需要使用 ODP.NET 下的其他一些類的話,
您可以使用 Reflector 來反射出 Oracle.DataAccess.dll 中的內容,
首先要想在應用程式中使用 ODP.NET 來訪問 Oracle 資料庫的話,
您必須向當前的應用程式添加一個引用,
這個 Oracle.DataAccess 必須是在您安裝了 Oracle Data Provider For .NET 後才可以引用,
添加了這個引用後,便可以來使用 Oracle.DataAccess 這個命名空間和其子內容了,
先來看頁面設計吧,
其中對 SqlDataSource 進行的資料繫結操作按如下順序進行
其中 SCOTT.ORACLE 便是我通過 ODP.NET 來與 Oracle 建立的一個資料庫連接,
然後就是來看一下 Web.config 中的資料庫連接字串的設定吧
其中呢,包括一個 Oracle 資料庫連接字串(OracleScott)
也包括一個 SqlServer 資料庫連接字串(SqlServerCon)
然後就來看 Code-Behind 了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using Oracle.DataAccess;
using System.Web.Configuration;
namespace WebForm
{
public partial class Demo__39 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnAddData_Click(object sender, EventArgs e)
{
//擷取 web.config 中的串連 SqlServer 資料庫的字串
string sqlServerConStr =
WebConfigurationManager.ConnectionStrings["SqlServerCon"].
ConnectionString;
//擷取 web.config 中串連 Oracle 資料庫的字串
string oracleConStr =
WebConfigurationManager.ConnectionStrings["OracleSCOTT"].
ConnectionString;
//先是取出 SQL Server 中的資料,並且存放在 DataSet 中
DataSet ds = new DataSet();
using (SqlConnection sqlCon = new SqlConnection(sqlServerConStr))
{
using (SqlCommand sqlCom = sqlCon.CreateCommand())
{
string sqlStr =
"SELECT 員工號碼,姓名,性別,目前工資 FROM 章立民研究室";
sqlCom.CommandType = CommandType.Text;
sqlCom.CommandText = sqlStr;
using (SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCom))
{
//將資料全部存入 DataSet 資料集中
sqlDA.Fill(ds);
}
}
}
using (OracleConnection oracleCon = new OracleConnection(oracleConStr))
{
oracleCon.Open();
using (OracleCommand oracleCom = oracleCon.CreateCommand())
{
oracleCom.CommandType = CommandType.Text;
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
//從 DataSet 逐條檢索資料並且儲存到 Oracle 資料表 Employee
string sqlStr = String.Format(
"INSERT INTO EMPLOYEE(EMPID,EMPNAME,EMPSEX,EMPSALARY) " +
"VALUES({0},'{1}','{2}',{3})",
ds.Tables[0].Rows[i][0],
ds.Tables[0].Rows[i][1],
ds.Tables[0].Rows[i][2],
ds.Tables[0].Rows[i][3]);
oracleCom.CommandText = sqlStr;
oracleCom.ExecuteNonQuery();
}
}
}
//只能從資料庫中取一次資料
btnAddData.Enabled = false;
}
}
}
下面就來看效果了,
下面的是還沒有從 Sql Server 中拷貝資料到 Oracle 資料庫之前,
Oracle 中本來的資料,
執行拷貝資料後的結果為
如此便成功實現了使用 ODP.NET 訪問 Oracle 資料庫了!!!