基於ODP的資料層基類C#源碼

來源:互聯網
上載者:User
#region using
using System;
using System.Configuration;
using System.Data;
using Oracle.DataAccess.Client;
#endregion

namespace WIS.Base.Data
{
 /// <summary>
 /// <table style="font-size:12px">
 /// <tr><td><b>文 件 名</b>:DbObject.cs</td></tr>
 /// <tr><td><b>功能描述</b>:資料層基類,提供對底層資料的基本操作</td></tr>
 /// <tr><td><b>創 建 人</b>:夏春濤 xchuntao@163.com qq:23106676</td></tr>
 /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
 /// </table>
 /// </summary>
 public class DbObject
 {
  #region 成員變數
  /// <summary>
  /// <table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:Oracle資料連線對象</td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table>
  /// </summary>
  protected OracleConnection Connection;

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:資料連線字串</td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  private string connectionString;
  #endregion

  #region 建構函式
  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:建構函式,使用設定檔中的預設資料連線字串ConnectionString,初始化資料連線對象 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  public DbObject()
  {
   connectionString = ConfigurationSettings.AppSettings.Get("ConnectionString");//從Web.Config中取得的連接字串
   Connection = new OracleConnection(connectionString);
  }
  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:建構函式,根據指定的資料連線字串,初始化資料連線對象</td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="newConnectionString">資料連線字串</param>
  public DbObject( string newConnectionString )
  {
   connectionString = newConnectionString;
   Connection = new OracleConnection( connectionString );
  }
  #endregion

  #region 私人方法

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:建立一個OracleCommand對象,用於產生OracleDataReader </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="storedProcName">預存程序名稱</param>
  /// <param name="parameters">預存程序的參數對象列表(數組)</param>
  /// <returns>OracleCommand對象</returns>
  private OracleCommand BuildCommand(string storedProcName, IDataParameter[] parameters)
  {
   OracleCommand command = new OracleCommand( storedProcName, Connection );
   command.CommandType = CommandType.StoredProcedure;

   foreach (OracleParameter parameter in parameters)
   {
    command.Parameters.Add( parameter );
   }

   return command;

  }
  #endregion

  #region 運行預存程序
  /// <summary>
  /// <table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行預存程序,擷取影響行數,返回預存程序運行結果 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table>
  /// </summary>
  /// <param name="storedProcName">預存程序名稱</param>
  /// <param name="parameters">預存程序的參數對象列表(數組)</param>
  /// <param name="rowsAffected">出參:執行預存程序所影響的記錄行數</param>
  /// <returns>預存程序的運行結果</returns>
  public object RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
  {
   object result;

   //if(Connection.State.ToString() == "Closed") Connection.Open();
   Connection.Open();
   OracleCommand command = BuildCommand( storedProcName, parameters );
   rowsAffected = command.ExecuteNonQuery();
   //如果有"ReturnValue"參數則傳回值,否則返回null
   bool blnHasReturn = false;
   for (int i=0;i<parameters.Length;i++)
   {
    if (parameters[i].Direction == ParameterDirection.ReturnValue)
    {
     blnHasReturn = true;
     break;
    }
   }
   if (blnHasReturn)
    result = command.Parameters["ReturnValue"].Value;
   else
    result = null;

   Connection.Close();
   return result;
  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行預存程序,返回產生的OracleDataReader對象 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="storedProcName">預存程序名稱</param>
  /// <param name="parameters">預存程序的參數對象列表(數組)</param>
  /// <returns>OracleDataReader對象</returns>
  public OracleDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
  {
   OracleDataReader returnReader;

   Connection.Open();
   OracleCommand command = BuildCommand( storedProcName, parameters );
   command.CommandType = CommandType.StoredProcedure;

   returnReader = command.ExecuteReader();
   //connection.Close();
   return returnReader;
  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行預存程序,建立一個DataSet對象,
  /// 將運行結果存入指定的DataTable中,返回DataSet對象 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="storedProcName">預存程序名稱</param>
  /// <param name="parameters">預存程序的參數對象列表(數組)</param>
  /// <param name="tableName">資料表名稱</param>
  /// <returns>DataSet對象</returns>
  public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
  {
   DataSet dataSet = new DataSet();
   Connection.Open();
   OracleDataAdapter sqlDA = new OracleDataAdapter();
   sqlDA.SelectCommand = BuildCommand( storedProcName, parameters );
   sqlDA.Fill( dataSet, tableName );
   Connection.Close();

   return dataSet;
  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行預存程序,將運行結果存入已有DataSet對象的指定表中,無傳回值 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>  
  /// <param name="storedProcName">預存程序名稱</param>
  /// <param name="parameters">預存程序的參數對象列表(數組)</param>
  /// <param name="dataSet">DataSet對象</param>
  /// <param name="tableName">資料表名稱</param>
  public void RunProcedure(string storedProcName, IDataParameter[] parameters, DataSet dataSet, string tableName )
  {
   Connection.Open();
   OracleDataAdapter sqlDA = new OracleDataAdapter();
   sqlDA.SelectCommand = BuildCommand( storedProcName, parameters );
   sqlDA.Fill( dataSet, tableName );
   Connection.Close();   
  }
  #endregion

  #region 運行SQL語句
  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行與寫資料庫相關的SQL語句,返回影響行數 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>  
  /// <param name="sqlString">SQL語句</param>
  /// <returns>影響行數</returns>
  public int ExecNonQuery(string sqlString)
  {
   int RowAffected;
   //if(Connection.State.ToString() == "Closed") Connection.Open();
   Connection.Open();
   OracleCommand command = new OracleCommand( sqlString, Connection );
   RowAffected = command.ExecuteNonQuery();
   Connection.Close();
 
   return RowAffected;

  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行SQL語句,返回OracleDataReader對象 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="sqlString">SQL語句</param>
  /// <returns>SqlDataReader對象</returns>
  public OracleDataReader ExecSqlString(string sqlString)
  {
   OracleDataReader returnReader;

   //if(Connection.State.ToString() == "Closed") Connection.Open();
   Connection.Open();
   OracleCommand command = new OracleCommand( sqlString, Connection );
   returnReader = command.ExecuteReader();
   //connection.Close();

   return returnReader;
  }

  
  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行SQL語句,返回DataSet對象 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="string">SQL語句</param>
  /// <param name="tableName">資料表名稱</param>
  /// <returns>DataSet對象</returns>
  public DataSet ExecSqlString(string sqlString, string tableName )
  {
   DataSet dataSet = new DataSet();
   //if (Connection.State.ToString() == "Closed") Connection.Open();
   Connection.Open();
   OracleDataAdapter sqlDA = new OracleDataAdapter();
   sqlDA.SelectCommand = new OracleCommand( sqlString, Connection );
   sqlDA.Fill( dataSet, tableName );
   Connection.Close();

   return dataSet;
  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行SQL語句,將運行結果存入已有DataSet對象的指定表中,無傳回值 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>  
  /// <param name="sqlString">SQL語句</param>
  /// <param name="dataSet">DataSet對象</param>
  /// <param name="tableName">資料表名稱</param>
  public void ExecSqlString(string sqlString, DataSet dataSet, string tableName )
  {
   //if (Connection.State.ToString() == "Closed") Connection.Open();
   Connection.Open();
   OracleDataAdapter sqlDA = new OracleDataAdapter();
   sqlDA.SelectCommand = new OracleCommand( sqlString, Connection );
   sqlDA.Fill( dataSet, tableName );
   Connection.Close();  
  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:運行SQL語句,返回查詢結果的第一行的第一列,忽略其它行或列 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>  
  /// <param name="sqlString">SQL語句</param>
  /// <returns>影響行數</returns>
  public object ExecScalar(string sqlString)
  {
   object returnScalar;
   //if (Connection.State.ToString() == "Closed") Connection.Open();
   Connection.Open();
   OracleCommand command = new OracleCommand( sqlString, Connection );
   returnScalar = command.ExecuteScalar();
   //Connection.Close();
   
   return returnScalar;
  }
  #endregion

  #region 關閉資料連線
  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:關閉資料連線 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  public void Close()
  {
   if(Connection.State.ToString() == "Open")
    Connection.Close();
  }
  #endregion

  #region 解構函式
  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:解構函式,善後處理,釋放資料連線 </td></tr>
  /// <tr><td><b>創 建 人</b>:夏春濤 </td></tr>
  /// <tr><td><b>建立時間</b>:2005-05-28 </td></tr>
  /// </table></summary>
  ~DbObject()
  {
   if(Connection.State.ToString() == "Open")
    Connection.Close();
   Connection.Dispose();
  }
  #endregion
  

 }
}

聯繫我們

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