我的SQLHelper

    技术2026-01-06  3

    1.如何访问数据库?

       首先建立与数据库的连接SqlConnection,就像从池塘拉了个水管过来;

       然后创建命令SqlCommand,就是你希望数据库做的事情;

       最后把命令发出去:

             如果不需要返回值,就调用ExecuteNonQuery();

             如果需要返回单个值,就调用ExecuteScalar();

             如果需要返回数据集,就用SqlDataAdapter包装命令,让它把返回的数据装到指定的DataSet中;

    2.注意事项

       使用前要打开数据库连接 _con.Open();

       使用后关闭数据库连接 _con.Close();

       SqlConnection是非托管资源,需要手动释放;

       数据库连接要“晚打开,早关闭”,提高效率;

       SqlTransaction要基于一个数据库连接,在事务完成前不要关闭连接,在完成后释放事务资源;

    3.代码

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace SQLHelper { public class SQLHelper : IDisposable { private SqlConnection _con; // 数据库连接(必须存在) private SqlTransaction _tran; // 数据库事务(可以为Null) private string _strConString; // 数据库连接字符串 public SQLHelper(string strConnectionString) { _strConString = strConnectionString; _con = new SqlConnection(_strConString); } private void OpenConnection() { if (_con == null) { _con = new SqlConnection(_strConString); } if (_con.State == ConnectionState.Closed) { _con.Open(); } } private void CloseConnection() { if (_con.State == ConnectionState.Open && _tran == null) { _con.Close(); } } public static SqlParameter CreateParam(string strName, SqlDbType type, int intSize, ParameterDirection direction, object objValue) { SqlParameter param; if (intSize > 0) { param = new SqlParameter(strName, type, intSize); } else { param = new SqlParameter(strName, type); } param.Direction = direction; if (direction != ParameterDirection.Output || objValue != null) { param.Value = objValue; } return param; } #region 事物操作 public void BeginTran() { OpenConnection(); _tran = _con.BeginTransaction(); } public void CommitTran() { if (_tran != null) { _tran.Commit(); _tran.Dispose(); _tran = null; CloseConnection(); } } public void RollbackTran() { if (_tran != null) { _tran.Rollback(); _tran.Dispose(); _tran = null; CloseConnection(); } } #endregion #region 数据库接口 public void ExecNonQuery(bool blnIsProcedure, string strSqlCommand, params SqlParameter[] aryParams) { SqlCommand cmd = new SqlCommand(strSqlCommand, _con); cmd.Parameters.AddRange(aryParams); if (blnIsProcedure) { cmd.CommandType = CommandType.StoredProcedure; } if (_tran != null) { cmd.Transaction = _tran; } try { OpenConnection(); cmd.ExecuteNonQuery(); } finally { CloseConnection(); } } public DataSet QueryDataSet(bool blnIsProcedure, string strSqlCommand, params SqlParameter[] aryParams) { DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(strSqlCommand, _con); cmd.Parameters.AddRange(aryParams); SqlDataAdapter adapter = new SqlDataAdapter(cmd); if (blnIsProcedure) { cmd.CommandType = CommandType.StoredProcedure; } if (_tran != null) { cmd.Transaction = _tran; } try { OpenConnection(); adapter.Fill(ds); return ds; } finally { CloseConnection(); } } public object QueryValue(bool blnIsProcedure, string strSqlCommand, params SqlParameter[] aryParams) { SqlCommand cmd = new SqlCommand(strSqlCommand, _con); cmd.Parameters.AddRange(aryParams); if (blnIsProcedure) { cmd.CommandType = CommandType.StoredProcedure; } if (_tran != null) { cmd.Transaction = _tran; } try { OpenConnection(); return cmd.ExecuteScalar(); } finally { CloseConnection(); } } #endregion #region 资源释放 private bool _disposed = false; // 资源是否已释放 private void Dispose(bool disposing) { if (!_disposed) { if (disposing) { _strConString = null; // 释放托管资源 } // 释放非托管资源 _con.Close(); _con.Dispose(); _con = null; } _disposed = true; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); // 资源已释放,不需要CLR再调用Finalize方法回收资源 } ~SQLHelper() { Dispose(false); } #endregion } }

    最新回复(0)