亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

通過ASP.NET連接Oracle數據庫

添加時間:2014-12-17 2:55:11  添加: 思海網絡 

通過ASP.NET連接Oracle數據庫實例:

一直用的是 MS SQL Server / Access 數據庫,通過.NET 訪問MS自家的東西幾乎沒碰到過什么麻煩。最近項目中要用 Oracle 作為數據庫,學習研究了一些 .NET 訪問Oracle 的東西,發現問題倒真的不少。 
1。System.Data.OracleClient 和 System.Data.OleDb 命名空間
  雖然通過這兩個命名空間的類都可以訪問 Oracle 數據庫,但和 SQL Server 類似的(System.Data.SqlClient 命名空間的類效率要比 System.Data.OleDb 命名空間中的類高一些),System.Data.OracleClient 命名空間中的類要比 System.Data.OleDb 命名空間的類效率高一些(這一點我沒有親自驗證,但大多數地方都會這么說,而且既然專門為 Oracle 作的東西理論上也應該專門作過針對性的優化)。
  當然還有另一點就是從針對性上說,System.Data.OracleClient 要更好一些:
  比如數據類型,System.Data.OleDb.OleDbType 枚舉中所列的就沒有 System.Data.OracleClient.OracleType 枚舉中的那些有針對性;另外,Oracle 的Number 類型如果數字巨大,超出 .NET 數據類型范圍的情況中,就必須使用System.Data.OracleClient 中的專門類 -- OracleNumber 類型。
  好了,不再贅述這兩個的比較,下面主要討論System.Data.OracleClient 命名空間中的類型,即 ADO.NET for Oracle Data Provider (數據提供程序)。
2。數據庫連接:
  無論是 System.Data.OleDb 還是 System.Data.OracleClient 訪問 Oracle 都需要在 .NET 運行的機器(ASP.NET 中就是 Web 服務器)安裝 Oracle 客戶端組件。(這一點是和 MS 的兩種數據庫不同的,MS 的東西安裝 MDAC: Microsoft Data Access Component 2.6 以上版本后,就無須再安裝 SQL Server 客戶端或者 Office 軟件,就能訪問。)
System Requirements:
  (1)如用 System.Data.OracleClient 訪問 Oracle,客戶端組件版本應在 Oracle 8i Client Release 3 (8.1.7)以上版本。MS 只確保訪問 Oracle 8.1.6、Oracle 8.1.7、Oracle 9i 服務器時的情況。MDAC 2.6 以上。
  (2)如用 System.Data.OleDb 訪問 Oracle,客戶端組件版本 7.3.3.4.0 以上或 8.1.7.4.1 以上。MDAC 2.6 以上。
  如服務器為 Oracle8i 以上,客戶端組件版本應為 8.0.4.1.1c。
  在 .NET 運行的機器中,安裝 Oracle 客戶端,然后打開 Net Manager (Oracle 9i) / Easy Config (Oracle 8i) 按你以前的經驗設置本地服務的映射(這里的服務名將用于數據庫連接串)。
  System.Data.OracleClient 中訪問 Oracle 數據庫的連接串是:
User ID=用戶名; Password=密碼; Data Source=服務名
  (上述為一般的連接串,詳細的連接串項目可以在 System.Data.OracleClient.OracleConnection.ConnectionString 屬性的文檔中找到。)
  System.Data.OleDb 中的訪問 Oracle 數據庫的連接串是:
Provider=MSDAORA.1; User ID=用戶名; Password=密碼; Data Source=服務名
3。Oracle 中的數據類型:
  Oracle 的數據類型和 SQL Server 相比,要“奇怪”一些:SQL Server 的大多數據類型很容易找到 .NET 中比較接近的類型,Oracle 中的類型就離 .NET 類型遠了許多,畢竟 Oracle 是和 Java 親近的數據庫。
number: 數字類型,一般是 Number(M,N),M是有效數字,N是小數點后的位數(默認0),這個是按十進制說的。 
nvarchar2: 可變長字符型(Unicode),這個比較像 SQL Server 的 nvarchar(但不知 Oracle 為什么加了個“2”)。(去掉“n”為非 Unicode 的,下同。) 
nchar: 定長字符型(Unicode)。 
nclob: “寫作文”的字段,存儲大量字符(Unicode)時用。 
date: 日期類型,比較接近 SQL Server 的 datetime。
  Oracle 中字段不能是 bit 或者 bool 之類的類型,一般是 number(1) 代替的。
  和 SQL Server 一樣在 SQL 命令中,字符類型需要用單引號(')隔開,兩個單引號('')是單引號的字符轉義(比如: I'm fat. 寫入一個 SQL 命令是: UPDATE ... SET ...='I''m fat.' ...)。
  比較特殊的是日期類型:比如要寫入 2004-7-20 15:20:07 這個時刻需要如下寫:
UPDATE ... SET ... = TIMESTAMP '2004-7-20 15:20:07' ...
注意這里使用了 TIMESTAMP 關鍵字,并使用單引號隔開;另外請注意日期格式,上面的格式是可識別的,Oracle 識別的格式沒有 SQL Server 那般多。這是和 SQL Server 不同的地方。
順便提一句:Access 中的日期類型是用井號(#)隔開的,UPDATE ... SET ... = #2004-7-20 15:20:07# ...
4。訪問 Oracle 過程/函數(1)
  SQL Server 作程序時經常使用存儲過程,Oracle 里也可以使用過程,還可以使用函數。Oracle 的過程似乎是不能有返回值的,有返回值的就是函數了(這點有些像 BASIC,函數/過程區分的很細致。SQL Server 存儲過程是可以有返回值的)。
.NET 訪問 Oracle 過程/函數的方法很類似于 SQL Server,例如:
OracleParameter[] parameters = {
    new OracleParameter("ReturnValue", OracleType.Int32, 0, ParameterDirection.ReturnValue, true, 0, 0, "",
        DataRowVersion.Default, Convert.DBNull )
    new OracleParameter("參數1", OracleType.NVarChar, 10),
    new OracleParameter("參數2",  OracleType.DateTime),
    new OracleParameter("參數3",  OracleType.Number, 1)
};
parameters[1].Value = "test";
parameters[2].Value = DateTime.Now;
parameters[3].Value = 1;                        // 也可以是 new OracleNumber(1);
OracleConnection connection = new OracleConnection( ConnectionString );
OracleCommand command = new OracleCommand("函數/程名", connection);
command.CommandType = CommandType.StoredProcedure;
foreach(OracleParameter parameter in parameters)
    command.Parameters.Add( parameter );
connection.Open();
command.ExecuteNonQuery();
int returnValue = parameters[0].Value; //接收函數返回值
connection.Close();
  Parameter 的 DbType 設定請參見 System.Data.OracleClient.OracleType 枚舉的文檔,比如:Oracle 數據庫中 Number 類型的參數的值可以用 .NET decimal 或 System.Data.OracleClient.OracleNumber 類型指定; Integer 類型的參數的值可以用 .NET int 或 OracleNumber 類型指定。等等。
  上面例子中已經看到函數返回值是用名為“ReturnValue”的參數指定的,該參數為 ParameterDirection.ReturnValue 的參數。
5。訪問 Oracle 過程/函數 (2)
  不返回記錄集(沒有 SELECT 輸出)的過程/函數,調用起來和 SQL Server 較為類似。但如果想通過過程/函數返回記錄集,在 Oracle 中就比較麻煩一些了。
在 SQL Server 中,如下的存儲過程:
CREATE PROCEDURE GetCategoryBooks
(
    @CategoryID int
)
AS
SELECT * FROM Books
WHERE CategoryID = @CategoryID
GO
  在 Oracle 中,請按以下步驟操作:
(1)創建一個包,含有一個游標類型:(一個數據庫中只需作一次)
CREATE OR REPLACE PACKAGE Test
  AS
      TYPE Test_CURSOR IS REF CURSOR;
END Test;
(2)過程:
CREATE OR REPLACE PROCEDURE GetCategoryBooks
(
    p_CURSOR out Test.Test_CURSOR,    -- 這里是上面包中的類型,輸出參數
    p_CatogoryID INTEGER
)
AS
BEGIN
    OPEN p_CURSOR FOR
          SELECT * FROM Books
          WHERE CategoryID=p_CatogoryID;
END GetCategoryBooks;
(3).NET 程序中:
OracleParameters parameters = {
    new OracleParameter("p_CURSOR", OracleType.CURSOR, 2000, ParameterDirection.Output, true, 0, 0, "",
          DataRowVersion.Default, Convert.DBNull),
    new OracleParameter("p_CatogoryID", OracleType.Int32)
};
parameters[1].Value = 22;
OracleConnection connection = new OracleConnection( ConnectionString );
OracleCommand command = new OracleCommand("GetCategoryBooks", connection);
command.CommandType = CommandType.StoredProcedure;
foreach(OracleParameter parameter in parameters)
    command.Parameters.Add( parameter );
connection.Open();
OracleDataReader dr = command.ExecuteReader();
while(dr.Read())
{
    // 你的具體操作。這個就不需要我教吧?
}
connection.Close();
  另外有一點需要指出的是,如果使用 DataReader 取得了一個記錄集,那么在 DataReader 關閉之前,程序無法訪問輸出參數和返回值的數據。

關鍵字:Oracle、數據庫、SQL Server

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站