Sql Server 與 oracle 資料庫操作的 不同之處

來源:互聯網
上載者:User

  Oracle.NET Framework 資料庫訪問程式命名空間為: System.Data.OracleClient.  檔案名稱為:System.Data.OracleClient.dll , 位於全域組件快取中。預設情況下vs 2005沒有引用該組件,需要使用時,只需要添加引用即可。
        與SqlClient 類似,OracleClient命名空間下由 OracleConnection  ,OracleCommand,OracleDataReader, OracleParameter ,OracleType等組成。以上列出的只是最常用的幾個類。更詳細的類別檢視請參考MSDN.  

欄位類型,參數類型
 欄位類型一般在使用Parameter是會涉及到。 在Sql Server中我們一般使用SqlDbType 枚舉表示資料庫中的各種欄位類型, 而在Oracle中,使用OracleType。 在Oracle中,字元型的欄位經常使用Varchar2 或 Nvarchar2, 而數值型用Number。 Varchar後面多了個2, 沒有深入學習Oracle,不知多加的這個“2" 的有什麼意義。 在使用參數(Parameter)時.
        OracleType.Varchar    表示資料庫中的  varchar2,
        OracleType.Nvarchar  表示資料庫中的 Nvarchar2, 
        OracleType.Number  表示  Number
        OracleType.DateTime 表示 Date
        至於其他的如:OracleType.Int32 由於在Oracle中沒有對應的欄位類型,一般使用較小,如果資料庫中的Number型欄位的值沒有小數位,也可以使用OracleType.Int32對應Number.

執行SQL語句

  Sql 語句中使用":" 表示參數。
     在Sql Server 中我們可以按以下方式使用SQL 語句: "Insert into Table (Field1,field2) values(@Value1,@Value2) ", 然後我們再New 幾個Paramter: new SqlParameter("@Value1",value)...
  在查詢字串中使用@+字元 來描述參數,在SqlParameter中的參數名也要使用"@"符號。
 而在Oracle中Sql 語句不能使用@符號, 以冒號":"代替. 如:

OracleCommand ocmd = new OracleCommand("insert into S_TABLES(TBLNAME,CAPTION,KEYFIELDS,TBLTYPE,RELATIONS) values(:name,:caption,:id,:type,:info)", ocon);
            OracleParameter opa = new OracleParameter("name", OracleType.LongVarChar, 30);
            opa.Value = name;
            ocmd.Parameters.Add(opa);
            opa = new OracleParameter("caption", OracleType.LongVarChar, 30);
            opa.Value = caption;
            ocmd.Parameters.Add(opa);
            opa = new OracleParameter("id", OracleType.LongVarChar, 100);
            opa.Value = id;
            ocmd.Parameters.Add(opa);
            opa = new OracleParameter("type", OracleType.LongVarChar, 100);
            opa.Value = type;
            ocmd.Parameters.Add(opa);
            opa = new OracleParameter("info", OracleType.LongVarChar, 100);
            opa.Value = info;
            ocmd.Parameters.Add(opa);
            ocmd.ExecuteNonQuery();

或者這樣(比較簡潔)

Title

ocmd.Parameters.AddRange(new OracleParameter[]{
                new OracleParameter("name",OracleType.VarChar,30),
                 new OracleParameter("captain",OracleType.VarChar,30),
             new OracleParameter("id",OracleType.VarChar,100),
             new OracleParameter("type",OracleType.VarChar,100),
             new OracleParameter("info",OracleType.VarChar,100),  
            });
            ocmd.Parameters[0] = name;
            ocmd.Parameters[1] = caption;
            ocmd.Parameters[2] = id;
            ocmd.Parameters[3] = type;
            ocmd.Parameters[4] = info;

預存程序的使用
       
        Oracle中的預存程序叫作包(Packages), 一個包分為 包頭和包體,類似於C++中的 類聲明。 包頭定義了預存程序的名稱和參數 ,包體除了名稱和參數,還包預存程序的所有語句。與SqlServer不同,Oracle中預存程序一般寫成 Function , 而不是PROCEDURE。Oracle預存程序並不直接返回記錄集,記錄集以遊標的形式通過參數返回。一個包(Packages可以包含多個預存程序,使用預存程序時採用“包名.預存程序名”的方式,下面是一個典型的Oracle預存程序,它位於 命稱為"Test"的包(Packages)中,它的使用方式應為:Test.GetList 

  Function GetList(keywords In varchar2
                           ,p_info_list_Cursor out get_data_cur_type)
   Return Number 
As 

  Begin
       
       open p_info_list_Cursor For 
       Select * from Test where Key=keywords
;
       Return 0;
  End;

      預存程序只返回一個Number ,記錄集以 out 參數方式返回。 在.net中調用方式如下:
  

 1         OracleConnection OracleConn = new OracleConnection(連接字串);
 2        OracleCommand cmd = new OracleCommand("Test.GetList", OracleConn);
 3        cmd.Parameters.AddRange(
 4            new OracleParameter[]
 5            {
 6                new OracleParameter("keyWords", OracleType.VarChar),
 7                new OracleParameter("ReturnValue", OracleType.Number, 0, ParameterDirection.ReturnValue, true, 0, 0, "",DataRowVersion.Default, Convert.DBNull),
 8                new OracleParameter("p_info_list_Cursor", OracleType.Cursor, 2000, ParameterDirection.Output, true, 0, 0, "",DataRowVersion.Default, Convert.DBNull)
 9            });
10        cmd.Parameters[0].Value = '美女';
11        cmd.Parameters[0].Direction = ParameterDirection.Input;
12        cmd.CommandType = CommandType.StoredProcedure;
13        OracleConn.Open()
14        OracleDataReader rdr=cmd.ExecuteReader();
15       //其他代碼
16        OracleConn.Close();
17

      OracleParameter中的 參數名一定要與預存程序中的名稱一致,可以忽略大小寫。預存程序定義了2個參數,一個KeyWords, 一個是out 類型的遊標:p_info_list_Cursor。 因為  Function有傳回值,所以我們還需要增加一個名為“ReturnValue"的參數, 這個名稱是固定的。 記錄集通過 p_info_list_Cursor 返回。 參數配置完成以後,直接使用cmd的眾多Exec方法即可,雖然我們使用了一個Out 參數接受記錄集遊標,但這個參數不需要我們處理,OracleCommand 會自動處理它,我們只需要像以往使用SqlCommand一樣,得到DataReader,然後讀資料即可。

相關文章

聯繫我們

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