.NET中封裝SqlHelper
SqlHelper是一個基於.NET Framework的資料庫操作元件,將運算元據庫常用的方法封裝到SqlHelper中,可以提高程式碼編寫效率,減少冗餘程式碼。下面將詳細示例一個自己封裝的SqlHelper,並展示如何使用它。
1、因為連線字串可能會根據不同需求而經常發生改變,所以要在App.config的xml檔案中寫上連線字串。當連線字串發生改變時,無需更改專案中的原始碼,只要更改配置檔案即可。如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<!--以下,是連線字串-->
<connectionStrings>
<add name="mssqlserver" connectionString="Data Source=fuqin-pc;Initial Catalog=PhoneNumManager;Integrated Security=true"/>
</connectionStrings>
<!--以上-->
</configuration>
2、建立一個類,命名為SqlHelper
3、封裝SqlHelper。注意:封裝ExecuteReader:因為這個方法涉及到連線池的問題。所以和以上的兩種方法有一定的差別,放一段程式碼。在這裡建立連線物件的時候不能using起來,using被翻譯成try { }finally { },在返回cmd.ExecuteReader的時候不能把連線關了,所以不能將SqlConnection conn = new SqlConnection(constr);給using起來。如果部using起來,那每次呼叫這個方法都會有一個物件放在連線池裡面,所以可以在返回的cmd.ExecuteReader裡面寫上一個過載cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);這樣在返回的後關閉reader的同時將conn這個連線物件給關閉。由於建立連線物件的時候沒有using起來,所以在返回的時候可能報異常,因此要將開啟連線和返回這兩條語句給try起來。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 繫結DataGridView
{
/// <summary>
/// 因為SqlHelper不需要建立物件,所以將其設定為靜態類
/// </summary>
public static class SqlHelper
{
/*
* 連線字串只需要在類的內部被訪問,且不能隨意更改連線字串的內容,所以將其設為私有的只讀欄位
* ConfigurationManager類需要新增引用System.Configuration,並匯入名稱空間
*/
private static readonly string constr = ConfigurationManager.ConnectionStrings["mssqlserver"].ConnectionString;
/// <summary>
/// 用來執行增刪改的方法
/// </summary>
/// <param name="sql">要傳入的sql語句</param>
/// <param name="pms">sql語句中的引數</param>
/// <returns>返回影響的行數</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
/*
* 用來執行返回單個結果的方法
*/
public static object ExecuteScalar(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
return cmd.ExecuteScalar();
}
}
}
/*
* 用來執行返回多行多列的方法
*/
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
{
SqlConnection con = new SqlConnection(constr);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
try
{
con.Open();
/*
* System.Data.CommandBehavior.CloseConnection這個列舉引數,表示將來使用完畢SqlDataReader後,在關閉reader的同時,在SqlDataReader內部會將關聯的Connection物件也關閉掉
*/
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch
{
con.Close();
con.Dispose();
throw;
}
}
}
/*
* ExecuteAdapter的方法,返回的類是DataTable的型別。
*/
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] pms)
{
DataTable dataTable = new DataTable();
using (SqlDataAdapter adapter=new SqlDataAdapter(sql,constr))
{
if (pms != null) adapter.SelectCommand.Parameters.AddRange(pms);
adapter.Fill(dataTable);
}
return dataTable;
}
}
}
至此,完成了整個SqlHelper的封裝,類中共封裝了四個常用的方法。相關文章
- 專案中封裝axios封裝iOS
- Simulink中封裝子系統封裝
- SqlHelper和DBHelperSQL
- 在Flutter中封裝redux的使用Flutter封裝Redux
- 在webview_flutter中封裝JSBridgeWebViewFlutter封裝JS
- Vue中封裝axios傳送請求Vue封裝iOS
- 在Vue中封裝一個select元件Vue封裝元件
- WPF中封裝一個自己的MessageBox封裝
- vue.js中封裝全域性filterVue.js封裝Filter
- 專案中封裝的time_util常用的方法封裝
- MapStruct在專案中封裝實踐-帶原始碼Struct封裝原始碼
- 分享幾個我工作中封裝的typeScript方法封裝TypeScript
- C++中封裝和繼承的訪問許可權C++封裝繼承訪問許可權
- 分享一個自己寫的C# SqlHelperC#SQL
- 在vue中封裝一個從右至左滾動公告的元件Vue封裝元件
- python 中封裝日誌 logging,為何列印行號固定在同一行?Python封裝
- 『無為則無心』Python物件導向 — 53、對Python中封裝的介紹Python物件封裝
- DjangoRestFramework框架三種分頁功能的實現 - 在DjangoStarter專案模板中封裝DjangoRESTFramework框架封裝
- 聊天室軟體原始碼中封裝一個金額輸入框元件的實現原始碼封裝元件
- 15 ##### 適合繫結方法的場景:在物件中封裝值,在方法中讀取物件的值物件封裝
- VS2022 安裝.NET 3.5/.NET 4/.NET 4.5/.NET 4.5.1目標包的方法
- .NET平臺系列26:在 Windows 上安裝 .NET Core/.NET5/.NET6Windows
- .NET平臺系列27:在 Linux 上安裝 .NET Core/.NET5/.NET6Linux
- .net core 常用安裝包
- .NET Protobuf包裝器庫
- win10.net3.5安裝方法_win10如何安裝.net3.5Win10
- net framework 3.5怎麼安裝 net framework 3.5無法安裝怎麼辦Framework
- sqlhelper整合dynamic多資料來源的分頁問題(非教學向)SQL
- Linux安裝Net7SDK執行Net專案Linux
- 在 Ubuntu 上安裝 .NET SDK 或 .NET 執行時Ubuntu
- 離線安裝net6
- OpenCloudOS使用snap安裝.NET 6Cloud
- win10 如何解除安裝.net_win10自帶net怎麼解除安裝Win10
- 安裝.NET Core遇到的錯誤
- win10安裝.net3.5Win10
- Windows Server 2019 Installation 安裝.net 3.5WindowsServer
- Centos下安裝 .net Core執行程式CentOS行程
- UOS LoongArch 上成功安裝.NET Core 3.1