之前學習的時候自己撰寫了一個資料庫操作類
大佬幫幫忙加上try-catch以及例外寫入本地日志相關的,使代碼更加完善,
代碼或注釋是否有錯誤,最后那個事務是否能用,是否還缺少其它方法?
謝謝各位大佬了,代碼如下:
public class SqlHelper
{
//創建資料庫連接
public static readonly string connString = ConfigurationManager.ConnectionStrings["MySql"].ConnectionString;
/// <summary>
/// 等待執行SQL陳述句的SqlCommand物件
/// </summary>
/// <param name="conn">SqlConnection物件,不允許為空</param>
/// <param name="comm">SqlCommand物件,不允許為空</param>
/// <param name="commType">SqlCommand型別,不允許為空</param>
/// <param name="commText">SqlCommand文本或SQL陳述句,不允許為空</param>
/// <param name="commParam">SqlParameter物件,允許為空</param>
private static void PrepareCommand(SqlConnection conn, SqlCommand comm, CommandType commType, string commText, SqlParameter[] commParam)
{
//判斷資料庫連接是否打開
if (conn.State != ConnectionState.Open)
{
//打開資料庫連接
conn.Open();
}
//設定SqlCommand的連接
comm.Connection = conn;
//設定SqlCommand的文本
comm.CommandText = commText;
//設定SqlCommand的型別
comm.CommandType = commType;
//判斷SqlParameter是否為空
if (commParam != null)
{
//回圈填充資料
foreach (SqlParameter param in commParam)
{
comm.Parameters.Add(param);
}
}
}
/// <summary>
/// 等待執行存盤程序的SqlCommand物件
/// </summary>
/// <param name="conn">SqlConnection物件,不允許為空</param>
/// <param name="comm">SqlCommand物件,不允許為空</param>
/// <param name="commName">存盤程序名稱</param>
/// <param name="commParam">SqlParameter物件,允許為空</param>
private static void PrepareCommand(SqlConnection conn, SqlCommand comm, string commName, params object[] commParam)
{
//判斷資料庫連接是否打開
if (conn.State != ConnectionState.Open)
{
//打開資料庫連接
conn.Open();
}
//設定SqlCommand的連接
comm.Connection = conn;
//設定SqlCommand的存盤程序名稱
comm.CommandText = commName;
//設定SqlCommand的型別
comm.CommandType = CommandType.StoredProcedure;
//獲取存盤程序的引數
SqlCommandBuilder.DeriveParameters(comm);
//移除Return_Value 引數
comm.Parameters.RemoveAt(0);
//判斷SqlParameter是否為空
if (commParam != null)
{
//回圈賦值
for (int i = 0; i < comm.Parameters.Count; i++)
{
comm.Parameters[i].Value = commParam[i];
}
}
}
/// <summary>
/// 執行SQL陳述句命令
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commType">命令型別</param>
/// <param name="commText">SQL陳述句 / 引數化SQL陳述句</param>
/// <param name="commParam">物件引數</param>
/// <returns>受影響的行數</returns>
public static int ExecuteNonQuery(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//使用Using提前釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//執行方法并傳遞引數
PrepareCommand(conn, comm, commType, commText, commParam);
//執行操作并接收結果
int val = comm.ExecuteNonQuery();
//清空SqlCommand引數串列
comm.Parameters.Clear();
//回傳結果
return val;
}
}
/// <summary>
/// 執行SQL存盤程序
/// 注意:不能執行有輸出(OUT)引數的存盤程序
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commName">存盤程序名稱</param>
/// <param name="commParam">物件引數</param>
/// <returns>受影響的行數</returns>
public static int ExecuteNonQuery(string connString, string commName, params object[] commParam)
{
//使用Using釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//執行方法并傳遞引數
PrepareCommand(conn, comm, commName, commParam);
//執行操作并接收結果
int val = comm.ExecuteNonQuery();
//回傳結果
return val;
}
}
/// <summary>
/// 執行SQL陳述句命令
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commType">命令型別</param>
/// <param name="commText">SQL陳述句 / 引數化SQL陳述句</param>
/// <param name="commParam">物件引數</param>
/// <returns>SqlDataReader物件</returns>
public static SqlDataReader ExecuteReader(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//創建資料庫連接
SqlConnection conn = new SqlConnection(connString);
try
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//執行方法并傳遞引數
PrepareCommand(conn, comm, commType, commText, commParam);
//創建SqlDataReader接收資料
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
//回傳SqlDataReader物件
return reader;
}
catch
{
//關閉資料庫連接
conn.Close();
//拋出例外
throw;
}
}
/// <summary>
/// 執行SQL存盤程序
/// 注意:不能執行有輸出(OUT)引數的存盤程序
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commName">存盤程序名稱</param>
/// <param name="commParam">物件引數</param>
/// <returns>SqlDataReader物件</returns>
public static SqlDataReader ExecuteReader(string connString, string commName, params object[] commParam)
{
//創建資料庫連接
SqlConnection conn = new SqlConnection(connString);
try
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//執行方法并傳遞引數
PrepareCommand(conn, comm, commName, commParam);
//創建SqlDataReader接收資料
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
//回傳SqlDataReader物件
return reader;
}
catch
{
//關閉資料庫連接
conn.Close();
//拋出例外
throw;
}
}
/// <summary>
/// 執行SQL陳述句命令
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commType">命令型別</param>
/// <param name="commText">SQL陳述句 / 引數化SQL陳述句</param>
/// <param name="commParam">物件引數</param>
/// <returns>DataSet物件</returns>
public static DataSet ExecuteDataSet(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//使用Using釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//執行方法并傳遞引數
PrepareCommand(conn, comm, commType, commText, commParam);
//使用Using釋放SqlDataAdapter資源
using (SqlDataAdapter da = new SqlDataAdapter(comm))
{
//初始化DataSet
DataSet ds = new DataSet();
//執行方法并傳遞引數
da.Fill(ds);
//回傳DataSet物件
return ds;
}
}
}
/// <summary>
/// 執行SQL存盤程序
/// 注意:不能執行有輸出(OUT)引數的存盤程序
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commName">存盤程序名稱</param>
/// <param name="commParam">物件引數</param>
/// <returns>DataSet物件</returns>
public static DataSet ExecuteDataSet(string connString, string commName, params object[] commParam)
{
//使用Using釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//執行方法并傳遞引數
PrepareCommand(conn, comm, commName, commParam);
//使用Using釋放SqlDataAdapter資源
using (SqlDataAdapter da = new SqlDataAdapter(comm))
{
//初始化DataSet
DataSet ds = new DataSet();
//執行方法并傳遞引數
da.Fill(ds);
//回傳DataSet物件
return ds;
}
}
}
uj5u.com熱心網友回復:
/// <summary>
/// 執行SQL陳述句命令
/// </summary>
/// <param name="connString">資料庫連接字串</param>
/// <param name="commType">命令型別</param>
/// <param name="commText">SQL陳述句 / 引數化SQL陳述句</param>
/// <param name="commParam">物件引數</param>
/// <returns>執行結果物件</returns>
public static object ExecuteScalar(string connString, CommandType commType, string commText, params SqlParameter[] commParam)
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//使用Using釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//執行方法并傳遞引數
PrepareCommand(conn, comm, commType, commText, commParam);
//執行操作并接收結果
object val = comm.ExecuteScalar();
//回傳結果
return val;
}
}
/// <summary>
/// 執行SQL存盤程序
/// 注意:不能執行有輸出(OUT)引數的存盤程序
/// </summary>
/// <param name="connString">資料庫連接</param>
/// <param name="commName">存盤程序名稱</param>
/// <param name="commParam">物件引數</param>
/// <returns>執行結果物件</returns>
public static object ExecuteScalar(string connString, string commName, params object[] commParam)
{
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//使用Using釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//執行方法并傳遞引數
PrepareCommand(conn, comm, commName, commParam);
//執行操作并接收結果
object val = comm.ExecuteScalar();
//回傳結果
return val;
}
}
/// <summary>
/// 執行事務SQL陳述句
/// </summary>
/// <param name="connString">資料庫連接</param>
/// <param name="commParam">事務引數</param>
public static void ExecuteTransaction(string connString, params string[] commParam)
{
//使用Using釋放SqlConnection資源
using (SqlConnection conn = new SqlConnection(connString))
{
//打開資料庫連接
conn.Open();
//開始事務
SqlTransaction tran = conn.BeginTransaction();
//創建SqlCommand命令
SqlCommand comm = new SqlCommand();
//設定SqlCommand的連接
comm.Connection = conn;
//設定SqlCommand的事務
comm.Transaction = tran;
try
{
//回圈執行事務
foreach (string param in commParam)
{
//設定SqlCommand的文本
comm.CommandText = param;
//執行事務
comm.ExecuteNonQuery();
}
//提交事務
tran.Commit();
}
catch
{
//終止事務
tran.Rollback();
//拋出例外
throw;
}
finally
{
//關閉資料庫連接
conn.Close();
}
}
}
/// <summary>
/// 將例外資訊寫入日志
/// </summary>
/// <param name="sqlLog">例外資訊</param>
private static void WriteLog(string sqlLog)
{
FileStream fs = new FileStream("SqlHelper.log", FileMode.Append);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now.ToString() + " " + sqlLog);
sw.Close();
fs.Close();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/76426.html
標籤:ASP.NET
上一篇:前臺是vb.net,后臺是java(spring框架)。前后臺資料怎么傳遞?
下一篇:如何建立個人的.net服務器
