亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用C#連接ORACLE數據庫

系統 3838 0

  一、使用OracleClient組件連接Oracle
?
?  .Net框架的System.Data.OracleClient.dll組件(ADO.Net組件),為連接和使用Oracle數據庫提供了很大的方便。
?
?  1、使用客戶端網絡服務名連接Oracle
?
?  基于業務邏輯與數據庫實體的分層需要,一般要求在不同于Oracle數據庫主機的客戶端機器連接和使用Oracle數據庫。這種情況要么是通過C/S應用程序的客戶端訪問數據庫的情況;要么是在B/S應用程序中,在WEB服務器端遠程連接Oracle數據庫服務器。
?
?  通過客戶端網絡服務名遠程連接Oracle,要求在客戶端機器中安裝Oracle客戶端工具(安裝類型可以不必選擇"管理員"模式,而只需要安裝運行時支持即可,為應用程序提供基本的網絡服務配置工具等)。
?
?  建立連接的語句比較簡單,關鍵點為data source的設置。這里的data source不像SqlServer連接字串中指的是數據庫名稱,而是指客戶端網絡服務名(相關內容請參考前面有關客戶端安裝的文章)。對于本文的Oracle安裝來說,data source對應著E:\Oracle_Client\oracle\ora92\network\admin\tnsnames.ora配置文件中的網絡服務名(出于方便試驗的原因,數據庫與獨立的客戶端工具分別安裝在了同一臺機器的不同目錄)。在具體實施連接時,將根據data source的值去該客戶網絡服務配置文件中查找對應項,以獲取數據庫服務器主機地址、端口、全局數據庫名等連接信息。
?
?  建立連接的主要代碼如下:
?
?  ……
?
?  using System.Data.OracleClient;
?
?  ……
?
?  //這里的"remotedb"對應于"Oracle客戶端的安裝與遠程連接配置"一文中配置的客戶端網絡服務名
?
?  OracleConnection conn=
?
?  new OracleConnection("data source=remotedb;User Id=scott;Password=scott;");
?
?  conn.Open();
?
?  ……
?
?  2、本地連接和使用Oracle
?
?  本地使用Oracle是指在安裝Oracle數據庫的主機中連接和使用Oracle數據庫。從安全性和負載均衡的角度考慮,這種方式是不可取的。這里僅作為實驗使用。
?
?  本地連接的代碼與遠程連接實際上沒有什么分別,只不過其data source指向服務器端的客戶網絡服務名。對于本文的數據庫安裝,它指向E:\Oracle_Server\oracle\ora92\network\admin\tnsnames.ora文件中所定義的網絡服務名(有關內容請參考"Oracle客戶端的安裝與遠程連接配置"一文)。
?
?  對于這種本地連接方式,在服務器端不能存在獨立安裝的客戶端工具,否則data source只會去匹配獨立客戶端的tnsnames.ora文件,即使找不到對應的網絡服務名,也不會再去匹配服務器端的服務名。這不知是。Net組件的設計錯誤,還是故意為之,以鼓勵遠程連接和使用Oracle 雅思答案 tygj123.com
?
?  二、使用OleDB組件連接和訪問Oracle數據庫
?
?  OleDB組件是通過Oracle OleDB驅動程序(OraOLEDB.dll)連接和訪問Oracle數據庫,使用OleDB驅動的前提也是要在客戶端安裝運行時環境。可以采用自定義的客戶端安裝方式,安裝包括OraOLEDB.dll等在內的必須的文件,可以不必安裝包括配置客戶網絡服務等的客戶端工具。在這種情況下,OleDB的連接字串及簡單訪問數據庫的代碼如下所示:
?
?  ……
?
?  using System.Data.OleDb;
?
?  ……
?
?  //這里的Data Source直接被賦值為類似tnsnames.ora文件中網絡服務名定義的內容,不再需要客戶端
?
?  //的配置文件tnsnames.ora(OracleClient也可以這樣處理)
?
?  OleDbConnection conn=
?
?  new OleDbConnection("Provider=OraOLEDB.Oracle.1;Server=localhost;
?
?  Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
?
?  (HOST = localhost)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = mydb.bawei)));
?
?  User ID=scott;Password=scott;");
?
?  conn.Open();
?
?  OleDbCommand comm=new OleDbCommand("select * from scott.emp",conn);
?
?  OleDbDataReader dr=comm.ExecuteReader();
?
?  Console.WriteLine("姓名 職位");
?
?  while(dr.Read())
?
?  {
?
?  Console.WriteLine(dr.GetString(1)+" "+dr.GetString(2));
?
?  }
?
?  Console.ReadLine();
?
?  dr.Close();
?
?  conn.Close();
?
?  ……
?
?  使用OleDB組件可以獲得比OracleClient更高的效率和性能,因為OleDB是比ADO.NET更底層的組件,ADO.NET也要通過OleDB獲取數據。
?
?  三、一個使用Oracle存儲過程的簡單登錄驗證程序 www.yz-lc.com
?
?  1、創建用戶表
?
?  作為實驗用表,用戶表admin僅包含用戶名和密碼兩個字段。創建表的SQL語句如下:
?
?  CREATE TABLE SCOTT.ADMIN ("NAME" VARCHAR2(20) NOT NULL,
?
?  "PASSWORD" VARCHAR2(20) NOT NULL) TABLESPACE "EXAMPLE"
?
?  2、創建驗證用戶登錄的存儲過程
?
?  CREATE OR REPLACE PROCEDURE "SCOTT"."P_LOGIN" (v_Name varchar2,
?
?  v_Password varchar2,b_Passed out char) as
?
?  n_Count number;
?
?  begin
?
?  select count(*) into n_Count from admin where name=v_Name and password=v_Password;
?
?  if n_Count > 0 then
?
?  b_Passed:='1';
?
?  else
?
?  b_Passed:='0';
?
?  end if;
?
?  end;
?
?  3、在Sql Plus等sql工具中使用PL/SQL測試存儲過程是否可用:
?
?  set serveroutput on;
?
?  declare
?
?  v_Name varchar2(20);
?
?  v_password varchar(20);
?
?  b_Passed char(1);
?
?  begin
?
?  v_Name:='mxh';
?
?  v_Password:='mxh';
?
?  p_Login(v_Name,v_Password,b_Passed);
?
?  if b_Passed ='1' then
?
?  DBMS_OUTPUT.PUT_LINE('SUCCESS');
?
?  end if;
?
?  end;
?
?  4、創建一個登錄窗口,實驗C#對存儲過程的調用:
?
?  (1)編寫數據訪問類,用于訪問和操作數據庫:
?
?  //DataAccess.cs
?
?  using System;
?
?  using System.Data;
?
?  using System.Data.OracleClient;
?
?  namespace OraLoginProcedure
?
?  {
?
?  public class DataAccess
?
?  {
?
?  private string connStr="data source=yourdb;User Id=scott;Password=scott;";
?
?  private OracleConnection conn=null;
?
?  public DataAccess()
?
?  {
?
?  }
?
?  public DataAccess(string strConnection)
?
?  {
?
?  this.connStr=strConnection;
?
?  }
?
?  public OracleConnection getConnection()
?
?  {
?
?  try
?
?  {
?
?  if(conn==null)
?
?  conn=new OracleConnection(connStr);
?
?  if(conn.State==ConnectionState.Open)
?
?  conn.Open();
?
?  return conn;
?
?  }
?
?  catch(OracleException e)
?
?  {
?
?  throw e;
?
?  }
?
?  }
?
?  public void closeConnection()
?
?  {
?
?  if(conn.State==ConnectionState.Open)
?
?  conn.Close();
?
?  }
?
?  //執行存儲過程
?
?  public void RunProcedure(string storedProcName,OracleParameter[] parameters)
?
?  {
?
?  OracleCommand cmd=new OracleCommand(storedProcName,getConnection());
?
?  cmd.CommandType=CommandType.StoredProcedure;
?
?  foreach(OracleParameter parameter in parameters)
?
?  {
?
?  cmd.Parameters.Add(parameter);
?
?  }
?
?  cmd.ExecuteNonQuery();//執行存儲過程
?
?  closeConnection();
?
?  }
?
?  //執行登錄驗證(在實際應用中應該把這種執行業務邏輯的代碼與數據操作基礎代碼分離,以
?
?  //實現軟件的清晰分層、增強代碼的可復用性)
?
?  public bool Login(string username,string password)
?
?  {
?
?  OracleParameter[] parameters={
?
?  new OracleParameter("v_Name",OracleType.VarChar,20),
?
?  new OracleParameter("v_Password",OracleType.VarChar,20),
?
?  new OracleParameter("b_Passed",OracleType.Char,1)
?
?  };
?
?  parameters[0].Value=username;
?
?  parameters[1].Value=password;
?
?  parameters[0].Direction=ParameterDirection.Input;
?
?  parameters[1].Direction=ParameterDirection.Input;
?
?  parameters[2].Direction=ParameterDirection.Output;
?
?  try
?
?  {
?
?  RunProcedure("P_LOGIN",parameters);
?
?  if(parameters[2].Value.ToString() == "1")
?
?  return true;
?
?  else
?
?  return false;
?
?  }
?
?  catch(Exception e)
?
?  {
?
?  throw e;
?
?  }
?
?  }
?
?  }
?
?  }
?
?  (2)編寫登錄驗證的界面程序:
?
?  //Form1.cs
?
?  ……
?
?  using System.Data;
?
?  namespace OraLoginProcedure
?
?  {
?
?  public class Login : System.Windows.Forms.Form
?
?  {
?
?  private System.Windows.Forms.Button button1;//登錄按鈕
?
?  private System.Windows.Forms.TextBox textBox1;//用戶名輸入框
?
?  private System.Windows.Forms.TextBox textBox2;//密碼輸入框
?
?  private System.Windows.Forms.Label label1;
?
?  private System.Windows.Forms.Label label2;
?
?  ……
?
?  public Login()
?
?  {
?
?  InitializeComponent();
?
?  }
?
?  ……
?
?  ///
?
?  /// 應用程序的主入口點。
?
?  ///
?
?  [STAThread]
?
?  static void Main()
?
?  {
?
?  Application.Run(new Login());
?
?  }
?
?  private void button1_Click(object sender, System.EventArgs e)
?
?  {
?
?  try
?
?  {
?
?  string username=textBox1.Text.Trim();
?
?  string password=textBox2.Text.Trim();
?
?  this.Close();//關閉界面后就讀不到其中的控件輸入了
?
?  DataAccess da=new DataAccess();
?
?  if(da.Login(username,password))
?
?  MessageBox.Show("Hello "+username);
?
?  else
?
?  MessageBox.Show("Login failed");
?
?  Application.Exit();
?
?  }
?
?  catch(Exception ex)
?
?  {
?
?  this.Close();
?
?  MessageBox.Show(ex.ToString());
?
?  Application.Exit();
?
?  }
?
?  }
?
?  }
?
?  }
?
?

使用C#連接ORACLE數據庫


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人久久精品二区三区 | 亚欧成人毛片一区二区三区四区 | 天天干夜夜操美女 | 国产成人a一区二区 | 99热久久国产精品这里 | 欧美一级在线免费观看 | 97在线资源| 久久免费高清 | 久久国产成人精品麻豆 | 四月婷婷七月婷婷综合 | 天天拍夜夜添久久精品免费 | 久久综合欧美成人 | 最新日本一级中文字幕 | 91麻豆精品一二三区在线 | 精品亚洲欧美高清不卡高清 | 四虎国产精品免费入口 | 日本xxxwww在线观看免费 | 亚洲综合激情视频 | 国产精品午夜在线观看 | 成人国产第一区在线观看 | 成人免费久久精品国产片久久影院 | 国产一区二区免费在线观看 | 亚洲色中文字幕在线播放 | 亚洲国产成人久久笫一页 | 国产成人综合亚洲欧美在 | 欧美一级看片a免费视频 | 久久99这里只有精品国产 | 国产精品麻豆99久久 | 国产高清自拍一区 | 欧洲在线免费视频 | 青青草国产97免久久费观看 | 亚洲一区二区三区高清视频 | 天天爱夜夜做 | 国产99视频精品草莓免视看 | 久草在线视频看看 | 色综合亚洲综合网站综合色 | 一级一毛片a级毛片欧美 | 久久久国产精品视频 | 夜夜做夜夜爽 | 手机看片福利日韩欧美看片 | 天天做人人爱夜夜爽2020毛片 |