首頁  >  文章  >  後端開發  >  C#編寫SqlHelper類別的使用詳解

C#編寫SqlHelper類別的使用詳解

黄舟
黄舟原創
2017-09-18 11:25:293113瀏覽

這篇文章主要介紹了使用C#寫SqlHelper類,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

無聊的週末,學習、程式設計無力。想找點事幹但又不知道做點什麼,猛然發現自己學過的SqlHelper快忘了。於是乎虎軀一震心想怎能如此墮落落下去,立刻打開電腦,雙手摸上鍵盤。寫下此文作為學習過程中的複習,並分享出知識(順便打發時間-^.^-)。

下面開始正文

這裡以控制台程式為案例。首先我們要先設定連線字串,我們需要在app.config檔中增加以下節點:


#
<connectionStrings>
   <add name="Sql" connectionString="server=数据库地址;uid=用户名;pwd=密码;database=数据库名"/>
  </connectionStrings>

1.接著需要建立一個名為SqlHepler類,然後建立一個方法來取得app.config檔案中配置的連接字串。


public static string GetSqlConnectionString()
 {
   return ConfigurationManager.
     ConnectionStrings["Sql"].ConnectionString;
 }

 2.下面來封裝第一個SqlHepler方法,封裝一個執行的sql 傳回受影響的行數。


 public static int ExecuteNonQuery(string sqlText,params SqlParameter[] parameters)
{
   using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))  
   {
     using (SqlCommand cmd=conn.CreateCommand())
     {
       conn.Open();  //打开数据库
       cmd.CommandText = sqlText;  //对CommandText进行赋值
       cmd.Parameters.AddRange(parameters);  //对数据库使用参数进行赋值
       return cmd.ExecuteNonQuery();
     }
   }
}

參數說明:sqlText:需要執行的sql腳本,parameters:所需的參數集合

該方法主要是用於執行,刪除、更新和插入操作,傳回受影響的行數。

3.繼續封裝一個查詢操作,傳回查詢結果中的第一行第一列的值


#
public static object ExecuteScalar(string sqlText, params SqlParameter[] parameters)
 {
  using (SqlConnection conn=new SqlConnection(GetSqlConnectionString()))
  {
   using (SqlCommand cmd=conn.CreateCommand())
   {
     conn.Open();
     cmd.CommandText = sqlText;
     cmd.Parameters.AddRange(parameters);
     return cmd.ExecuteScalar();
   }
  }
}

參數說明:如上。

該方法的回傳值第object,所以當我們查詢的資料不知道是什麼類型的時候可以使用該類別。

4.在封裝個常用的查詢方法,傳回一個DataTable


public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] parameters) 
 {
  using (SqlDataAdapter adapter =new SqlDataAdapter(sqlText,GetSqlConnectionString()))
  {
    DataTable dt = new DataTable();
    adapter.SelectCommand.Parameters.AddRange(parameters);
    adapter.Fill(dt);
    return dt;
   }
}

參數說明:如上。

 此方法主要用於一些查詢數據,dt將填入查詢出來的數據,然後傳回資料。

5.最後在寫封裝一個查詢方法,該方法傳回的是一個SqlDataReader類型


public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters)
{
   //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
   SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
   SqlCommand cmd = conn.CreateCommand();
   conn.Open();
   cmd.CommandText = sqlText;
   cmd.Parameters.AddRange(parameters);
   //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
   return cmd.ExecuteReader(CommandBehavior.CloseConnection); 
}

參數說明:依舊如上。

該方法傳回的SqlDataReader 類型物件需要一直使用SqlConnection對象,所以無法釋放。此類型讀取資料是一行一行的讀取。讀取使用的是該類別的Read()方法,傳回值為bool判斷資料是否為空(也就是是否讀取到最後一行),該方法將自動讀取下到下一筆記錄。

作為一個初學者,這次只是簡單的介紹,並複習了一下SqlHepler類別。

附上全部程式碼:


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

namespace UserInfoMgr
{
  class SqlHelper
  {
    /// <summary>
    /// 获取连接字符串
    /// </summary>
    /// <returns>连接字符串</returns>
    public static string GetSqlConnectionString()
    {
      return ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
    }

    /// <summary>
    /// 封装一个执行的sql 返回受影响的行数
    /// </summary>
    /// <param name="sqlText">执行的sql脚本</param>
    /// <param name="parameters">参数集合</param>
    /// <returns>受影响的行数</returns>
    public static int ExecuteNonQuery(string sqlText,params SqlParameter[] parameters)
    {
      using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
      {
        using (SqlCommand cmd=conn.CreateCommand())
        {
          conn.Open();
          cmd.CommandText = sqlText;
          cmd.Parameters.AddRange(parameters);
          return cmd.ExecuteNonQuery();
        }
      }
    }

    /// <summary>
    /// 执行sql,返回查询结果中的第一行第一列的值
    /// </summary>
    /// <param name="sqlText">执行的sql脚本</param>
    /// <param name="parameters">参数集合</param>
    /// <returns>查询结果中的第一行第一列的值</returns>
    public static object ExecuteScalar(string sqlText, params SqlParameter[] parameters)
    {
      using (SqlConnection conn=new SqlConnection(GetSqlConnectionString()))
      {
        using (SqlCommand cmd=conn.CreateCommand())
        {
          conn.Open();
          cmd.CommandText = sqlText;
          cmd.Parameters.AddRange(parameters);
          return cmd.ExecuteScalar();
        }
      }
    }

    /// <summary>
    /// 执行sql 返回一个DataTable
    /// </summary>
    /// <param name="sqlText">执行的sql脚本</param>
    /// <param name="parameters">参数集合</param>
    /// <returns>返回一个DataTable</returns>
    public static DataTable ExecuteDataTable(string sqlText, params SqlParameter[] parameters) 
    {
      using (SqlDataAdapter adapter =new SqlDataAdapter(sqlText,GetSqlConnectionString()))
      {
        DataTable dt = new DataTable();
        adapter.SelectCommand.Parameters.AddRange(parameters);
        adapter.Fill(dt);
        return dt;
      }
    }

    /// <summary>
    /// 执行sql脚本
    /// </summary>
    /// <param name="sqlText">执行的sql脚本</param>
    /// <param name="parameters">参数集合</param>
    /// <returns>返回一个SqlDataReader</returns>
    public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters)
    {
      //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
      SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
      SqlCommand cmd = conn.CreateCommand();
      conn.Open();
      cmd.CommandText = sqlText;
      cmd.Parameters.AddRange(parameters);
      //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
      return cmd.ExecuteReader(CommandBehavior.CloseConnection); 
    }
  }
}

以上是C#編寫SqlHelper類別的使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn