.net中的常用操作類

來源:互聯網
上載者:User

OperateDatabase.cs檔案代碼:

using System;
using System.Data;
using System.Collections;
using System.Data.SqlClient;
using System.Configuration;

namespace Gogofly.OperateSqlServer
{
 public class OperateDatabase
 {
  #region  定義屬性

  /// <summary>
  /// 定義在web.config中標識連接字串的Name屬性的值
  /// </summary>
  private static string connectionStringNameInWebConfig = "SQLSERVERCONNECTIONSTRING";
  public static string ConnectionStringNameInWebConfig
  {
   get
   {
    return connectionStringNameInWebConfig;
   }
   set
   {   ///字串不可為空或Null 參考
    if(!string.IsNullOrEmpty(value))
    {
     connectionStringNameInWebConfig = value;
    }
   }
  }

  /// <summary>
  /// 儲存執行資料庫操作傳回值的參數標識
  /// </summary>
  private static string returnValueString = "RETURNVALUESTRING";
  public static string ReturnValueString
  {
   get
   {
    return returnValueString;
   }   
  }

  #endregion

  #region 建立參數

  /// <summary>
  /// 建立參數
  /// </summary>
  /// <param name="ParamName">預存程序名稱</param>
  /// <param name="DbType">參數類型</param>
  /// <param name="Size">參數大小</param>
  /// <param name="Direction">參數方向</param>
  /// <param name="Value">參數值</param>
  /// <returns>新的 parameter 對象</returns>
  private static SqlParameter CreateParam(string ParamName,SqlDbType DbType,
   Int32 Size,ParameterDirection Direction,object Value)
  {
   SqlParameter param;   
   if(Size > 0)
   {   ///使用size建立大小不為0的參數
    param = new SqlParameter(ParamName,DbType,Size);
   }
   else
   {
    param = new SqlParameter(ParamName,DbType);
   }
   ///建立輸出型別參數
   param.Direction = Direction;
   if(!(Direction == ParameterDirection.Output && Value == null))
   {
    param.Value = Value;
   }
   ///返回參數
   return param;
  }

  /// <summary>
  /// 建立輸入型別參數
  /// </summary>
  /// <param name="ParamName">預存程序名稱</param>
  /// <param name="DbType">參數類型</param></param>
  /// <param name="Size">參數大小</param>
  /// <param name="Value">參數值</param>
  /// <returns>新的parameter 對象</returns>
  public static SqlParameter CreateInParam(string ParamName,
   SqlDbType DbType,int Size,object Value)
  {
   return CreateParam(ParamName,DbType,Size,ParameterDirection.Input,Value);
  }

  /// <summary>
  /// 建立輸出型別參數
  /// </summary>
  /// <param name="ParamName">預存程序名稱</param>
  /// <param name="DbType">參數類型</param>
  /// <param name="Size">參數大小</param>
  /// <returns>新的 parameter 對象</returns>
  public static SqlParameter CreateOutParam(string ParamName,
   SqlDbType DbType,int Size)
  {
   return CreateParam(ParamName,DbType,Size,ParameterDirection.Output,null);
  }

  /// <summary>
  /// 建立傳回型別參數
  /// </summary>
  /// <param name="ParamName">預存程序名稱</param>
  /// <param name="DbType">參數類型</param>
  /// <param name="Size">參數大小</param>
  /// <returns>新的 parameter 對象</returns>
  public static SqlParameter CreateReturnParam(string ParamName,
   SqlDbType DbType,int Size)
  {
   return CreateParam(ParamName,DbType,Size,ParameterDirection.ReturnValue,null);
  }

  #endregion

  #region 建立SqlCommand和SqlDataAdapter

  /// <summary>
  /// 建立SqlCommand對象
  /// </summary>
  /// <param name="procName">預存程序的名稱</param>
  /// <param name="prams">預存程序所需參數</param>
  /// <returns>返回SqlCommand對象</returns>
  private static SqlCommand CreateSqlCommand(string procName,
   params SqlParameter[] prams)
  {   ///建立資料庫連接
   SqlConnection sqlCon = CreateSqlConnection();
   ///開啟資料庫連接
   if(sqlCon == null) return null;
   if(sqlCon.State == ConnectionState.Closed)
   {
    sqlCon.Open();
   }
   ///設定SqlCommand的屬性
   SqlCommand cmd = new SqlCommand(procName,sqlCon);
   cmd.CommandType = CommandType.StoredProcedure;

   ///添加預存程序參數
   if(prams != null)
   {
    foreach(SqlParameter parameter in prams)
    {
     cmd.Parameters.Add(parameter);
    }
   }

   ///添加返回參數
   cmd.Parameters.Add(new SqlParameter(returnValueString,
    SqlDbType.Int,4,ParameterDirection.ReturnValue,
    false,0,0,string.Empty,DataRowVersion.Default,null));

   ///返回SqlCommand對象
   return cmd;
  }

  /// <summary>
  /// 建立SqlDataAdapter對象
  /// </summary>
  /// <param name="procName">預存程序的名稱</param>
  /// <param name="prams">預存程序所需參數</param>
  /// <returns>返回SqlDataAdapter對象</returns>
  private static SqlDataAdapter CreateSqlDataAdapter(string procName,
   params SqlParameter[] prams)
  {   ///建立資料庫連接
   SqlConnection sqlCon = CreateSqlConnection();
   ///開啟資料庫連接
   if(sqlCon == null) return null;
   if(sqlCon.State == ConnectionState.Closed)
   {
    sqlCon.Open();
   }
   ///設定SqlDataAdapter的屬性
   SqlDataAdapter da = new SqlDataAdapter(procName,sqlCon);
   da.SelectCommand.CommandType = CommandType.StoredProcedure;

   ///添加預存程序參數
   if(prams != null)
   {
    foreach(SqlParameter parameter in prams)
    {
     da.SelectCommand.Parameters.Add(parameter);
    }
   }

   ///添加返回參數
   da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
    SqlDbType.Int,4,ParameterDirection.ReturnValue,
    false,0,0,string.Empty,DataRowVersion.Default,null));

   ///返回SqlDataAdapter對象
   return da;
  }
        /// <summary>
        /// 防止SQL注入式攻擊
        /// </summary>
        /// <returns>返回整型資料</returns>
        public static int checkLogin(string loginName, string loginPwd)
        {
            int result;
            ///建立資料庫連接
            SqlConnection con = CreateSqlConnection();
            SqlCommand myCommand = new SqlCommand("select count(*) from [User] where UserName=@loginName and Password=@loginPwd and RoleID=@RoleID", con);
            myCommand.Parameters.Add(new SqlParameter("@loginName", SqlDbType.VarChar, 50));
            myCommand.Parameters["@loginName"].Value = loginName;
            myCommand.Parameters.Add(new SqlParameter("@loginPwd", SqlDbType.VarChar, 225));
            myCommand.Parameters["@loginPwd"].Value = loginPwd;
            myCommand.Parameters.Add(new SqlParameter("@RoleID", SqlDbType.Int));
            myCommand.Parameters["@RoleID"].Value = 1;
            myCommand.Connection.Open();
            result = (int)myCommand.ExecuteScalar();
            myCommand.Connection.Close();
            return result;
        }

  #endregion

  #region 管理串連

  /// <summary>
  /// 建立串連.
  /// </summary>
  private static SqlConnection CreateSqlConnection()
  {   ///擷取連接字串
   string conStr = (string)Cache.GetData(connectionStringNameInWebConfig);

   if(string.IsNullOrEmpty(conStr))
   {  
    try
    {   ///如果連接字串為空白,則從設定檔中擷取連接字串
     conStr = ConfigurationManager.ConnectionStrings[connectionStringNameInWebConfig].ConnectionString;
    }
    catch(Exception ex)
    {
     throw new Exception(ex.Message,ex);
    }
    ///把字串添加到緩衝中
    Cache.CachingData(connectionStringNameInWebConfig,conStr);    
   }
   if(!string.IsNullOrEmpty(conStr))
   { /// 建立資料庫連接
    return(new SqlConnection(conStr));
   }
   return null;
  }

  #endregion

        /// <summary>
        /// 說明:GetDataSet資料集,返回資料來源的資料集
        /// 傳回值:資料集DataSet
        /// 參數:sQueryString SQL字串,TableName 資料表名稱
        /// </summary>
        public static DataSet GetDataSet(string sQueryString, string TableName)
        {
            ///建立資料庫連接
            SqlConnection con = CreateSqlConnection();
            con.Open();
            SqlDataAdapter dbAdapter = new SqlDataAdapter(sQueryString, con);
            DataSet dataset = new DataSet();
            dbAdapter.Fill(dataset, TableName);
            con.Close();
            return dataset;
        }

  #region 執行預存程序

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序的名稱</param>
  /// <returns></returns>
  public static int RunProc(string procName)
  {   ///建立SqlCommand對象
   SqlCommand cmd = CreateSqlCommand(procName,null);
   if(cmd == null) return -1;
   try
   {   ///執行預存程序
    cmd.ExecuteNonQuery();
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(cmd.Connection.State == ConnectionState.Open)
    {
     cmd.Connection.Close();
    }
   }

   ///返回執行結果
   return (int)cmd.Parameters[returnValueString].Value;
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="prams">預存程序參數</param>
  /// <returns></returns>
  public static int RunProc(string procName,params SqlParameter[] prams)
  {   ///建立SqlCommand對象
   SqlCommand cmd = CreateSqlCommand(procName,prams);
   if(cmd == null) return -1;
   try
   {   ///執行預存程序
    cmd.ExecuteNonQuery();
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(cmd.Connection.State == ConnectionState.Open)
    {
     cmd.Connection.Close();
    }
   }

   ///返回執行結果
   return (int)cmd.Parameters[returnValueString].Value;  
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="dr">返回SqlDataReader對象</param>
  public static void RunProc(string procName,out SqlDataReader dr)
  {   ///建立SqlCommand對象
   SqlCommand cmd = CreateSqlCommand(procName,null);
   if(cmd == null)
   {
    dr = null;
    return;
   }
   try
   {   ///讀取資料
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
   }  
   catch(Exception ex)
   {
    dr = null;
    throw new Exception(ex.Message,ex);
   }
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="dr">返回SqlDataReader對象</param>
  /// <param name="prams">預存程序參數</param>  
  public static void RunProc(string procName,out SqlDataReader dr,params SqlParameter[] prams)
  {   ///建立SqlCommand對象
   SqlCommand cmd = CreateSqlCommand(procName,prams);
   if(cmd == null)
   {
    dr = null;
    return;
   }
   try
   {   ///讀取資料
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
   }  
   catch(Exception ex)
   {
    dr = null;
    throw new Exception(ex.Message,ex);
   }
  } 

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="ds">返回DataSet對象</param>
  public static void RunProc(string procName,ref DataSet ds)
  {   ///初始化ds
   if(null == ds) ds = new DataSet();
   ///建立SqlDataAdapter
   SqlDataAdapter da = CreateSqlDataAdapter(procName,null);
   if(da == null) return;
   try
   {   ///填充資料
    da.Fill(ds);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(da.SelectCommand.Connection.State == ConnectionState.Open)
    {
     da.SelectCommand.Connection.Close();
    }
   }
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="ds">返回DataSet對象</param>
  /// <param name="prams">預存程序參數</param>  
  public static void RunProc(string procName,ref DataSet ds,params SqlParameter[] prams)
  {   ///初始化ds
   if(null == ds) ds = new DataSet();
   ///建立SqlDataAdapter
   SqlDataAdapter da = CreateSqlDataAdapter(procName,prams);
   if(da == null) return;
   try
   {   ///填充資料
    da.Fill(ds);
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(da.SelectCommand.Connection.State == ConnectionState.Open)
    {
     da.SelectCommand.Connection.Close();
    }
   }
  }
  
  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="ds">返回DataSet對象</param>
  /// <param name="start">開始的記錄</param>
  /// <param name="max">最大記錄數量</param>
  public static void RunProc(string procName,ref DataSet ds,
   int start,int max)
  {   ///初始化ds
   if(null == ds) ds = new DataSet();
   ///建立SqlDataAdapter
   SqlDataAdapter da = CreateSqlDataAdapter(procName,null);
   if(da == null) return;
   try
   {   ///填充資料
    da.Fill(ds,start,max,"TableName");
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(da.SelectCommand.Connection.State == ConnectionState.Open)
    {
     da.SelectCommand.Connection.Close();
    }
   }
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="ds">返回DataSet對象</param>
  /// <param name="start">開始的記錄</param>
  /// <param name="max">最大記錄數量</param>
  /// <param name="prams">預存程序參數</param>
  public static void RunProc(string procName,ref DataSet ds,
   int start,int max,params SqlParameter[] prams)
  {   ///初始化ds
   if(null == ds) ds = new DataSet();
   ///建立SqlDataAdapter
   SqlDataAdapter da = CreateSqlDataAdapter(procName,prams);
   if(da == null) return;
   try
   {   ///填充資料
    da.Fill(ds,start,max,"TableName");
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(da.SelectCommand.Connection.State == ConnectionState.Open)
    {
     da.SelectCommand.Connection.Close();
    }
   }
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <returns>返回預存程序傳回值</returns>
  public static int RunProcScalar(string procName)
  {   ///建立SqlCommand對象
   SqlCommand cmd = CreateSqlCommand(procName,null);
   if(cmd == null) return -1;
   int result;
   try
   {
    ///執行預存程序
    result = (int)cmd.ExecuteScalar();
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(cmd.Connection.State == ConnectionState.Open)
    {
     cmd.Connection.Close();
    }
   }
   ///返回查詢結果
   return result;
  }

  /// <summary>
  /// 執行預存程序
  /// </summary>
  /// <param name="procName">預存程序名稱</param>
  /// <param name="prams">預存程序所需參數</param>
  /// <returns>返回預存程序傳回值</returns>
  public static int RunProcScalar(string procName,params SqlParameter[] prams)
  {    ///建立SqlCommand對象
   SqlCommand cmd = CreateSqlCommand(procName,prams);
   if(cmd == null) return -1;
   int result;
   try
   {
    ///執行預存程序
    result = (int)cmd.ExecuteScalar();
   }
   catch(Exception ex)
   {
    throw new Exception(ex.Message,ex);
   }
   finally
   {   ///關閉串連
    if(cmd.Connection.State == ConnectionState.Open)
    {
     cmd.Connection.Close();
    }
   }
   ///返回查詢結果
   return result;
  }

  #endregion 
 }

 internal class Cache
 {
  #region 快取資料

  /// <summary>
  /// 定義緩衝區
  /// </summary>
  private static Hashtable cache = Hashtable.Synchronized(new Hashtable());

  /// <summary>
  /// 快取資料到Cache中,如果已經存在快取項目,則重寫緩衝的資料。
  /// </summary>
  /// <param name="key"></param>
  /// <param name="value"></param>
  public static void CachingData(string key,object value)
  {
   cache[key] = value;   
  }

  /// <summary>
  /// 擷取緩衝的資料
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  public static object GetData(string key)
  {
   return (object)cache[key];
  }

  #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.