根據自己項目的開發需要,整理了一個SqlHelper類 相比較網上通用的SqlHelper類方法主要有一下幾點的不同: 1.因為要操作多個資料庫,所以資料庫連接字元串沒有寫死到方法里,作為參數提供出來。 2.因為涉及到多表多庫的操作,涉及到資料庫級別的事物,以及邏輯業務上的事物,因此,要從最基元的部 ...
根據自己項目的開發需要,整理了一個SqlHelper類
相比較網上通用的SqlHelper類方法主要有一下幾點的不同:
1.因為要操作多個資料庫,所以資料庫連接字元串沒有寫死到方法里,作為參數提供出來。
2.因為涉及到多表多庫的操作,涉及到資料庫級別的事物,以及邏輯業務上的事物,因此,要從最基元的部分就儘可能屏蔽問題,進行嚴格的事物處理。
方法如下:
個人認為使用率較高也較為方便的是 ExecuteNonQuery (增、刪、改),ExecuteDataTable(支持存儲過程和SQL語句查詢,返回tadatable)
其中ExecuteNonQuery中的 iCount 參數就是用來進行事物處理的
/// <summary>
/// 對資料庫執行增、刪、改命令
/// </summary>
/// <param name="sql">T-Sql語句</param>
/// <param name="pa">參數數組</param>
/// <param name="iCount">成功情況下影響行數</param>
/// <returns>受影響的記錄數</returns>
public static int ExecuteNonQuery(string connectionString, string sql, SqlParameter[] pa, int iCount)
{
using (SqlConnection Connection = new SqlConnection(connectionString))
{
Connection.Open();
SqlTransaction trans = Connection.BeginTransaction();
try
{
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.Transaction = trans;
if (pa != null)
{
cmd.Parameters.AddRange(pa);
}
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
int result = cmd.ExecuteNonQuery();
if (iCount != 0 && iCount != result)
{
trans.Rollback();
return 0;
}
trans.Commit();
return result;
}
catch (Exception ex)
{
trans.Rollback();
return 0;
}
}
}
/// <summary>
/// 執行指定資料庫連接對象的命令,指定存儲過程參數,返回DataTable
/// </summary>
/// <param name="connectionString">連接字元串</param>
/// <param name="type">命令類型(T-Sql語句或者存儲過程)</param>
/// <param name="sql">T-Sql語句或者存儲過程的名稱</param>
/// <param name="pa">參數數組</param>
/// <returns>結果集DataTable</returns>
public static DataTable ExecuteDataTable(string connectionString, CommandType type, string sql, params SqlParameter[] pa)
{
using (SqlConnection Connection = new SqlConnection(connectionString))
{
try
{
if (Connection.State != ConnectionState.Open)
Connection.Open();
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(sql, Connection);
cmd.CommandType = type;
if (pa != null)
cmd.Parameters.AddRange(pa);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
if (ds.Tables != null && ds.Tables.Count > 0)
{
return ds.Tables[0];
}
}
catch (Exception ex)
{
return null;
}
return null;
}
}
/// <summary>
/// 查詢結果集中第一行第一列的值
/// </summary>
/// <param name="connectionString">連接字元串</param>
/// <param name="sql">T-Sql語句</param>
/// <param name="pa">參數數組</param>
/// <returns>第一行第一列的值</returns>
public static int ExecuteScalar(string connectionString, string sql, SqlParameter[] pa)
{
using (SqlConnection Connection = new SqlConnection(connectionString))
{
if (Connection.State != ConnectionState.Open)
Connection.Open();
SqlCommand cmd = new SqlCommand(sql, Connection);
if (pa != null)
cmd.Parameters.AddRange(pa);
int result = Convert.ToInt32(cmd.ExecuteScalar());
return result;
}
}
/// <summary>
/// 創建數據讀取器
/// </summary>
/// <param name="connectionString">連接字元串</param>
/// <param name="sql">T-Sql語句</param>
/// <param name="pa">參數數組</param>
/// <param name="Connection">資料庫連接</param>
/// <returns>數據讀取器</returns>
public static SqlDataReader ExecuteReader(string connectionString, string sql, SqlParameter[] pa, SqlConnection conn)
{
if (conn.State != ConnectionState.Open)
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
if (pa != null)
cmd.Parameters.AddRange(pa);
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}