using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Configuration; using System.Data.SqlClient; using System.Data; using System.Collections; namespace XXX { public class DbHelper { private readonly string connString = ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString; private static DbHelper dbhelper; private DbHelper() { } public static DbHelper Instance() { if (dbhelper == null) return dbhelper = new DbHelper(); return dbhelper; } /// <summary> /// 返回connection对象 /// </summary> /// <returns></returns> public SqlConnection ReturnConn() { SqlConnection Conn = new SqlConnection(connString); Conn.Open(); return Conn; } /// <summary> /// 断开connection /// </summary> /// <param name="Conn"></param> public void Dispose(SqlConnection Conn) { if (Conn != null) { Conn.Close(); Conn.Dispose(); } GC.Collect(); } /// <summary> /// 运行SQL语句,返回受影响行数 /// </summary> /// <param name="SQL"></param> public int ExecSql(string SQL) { SqlConnection Conn; Conn = ReturnConn(); SqlCommand Cmd; Cmd = CreateCmd(SQL, Conn); int rows = 0; try { rows = Cmd.ExecuteNonQuery(); } catch { throw new Exception(SQL); } Dispose(Conn); return rows; } /// <summary> /// 运行SQL语句返回DataReader /// </summary> /// <param name="SQL"></param> /// <returns>SqlDataReader对象.</returns> public SqlDataReader ExecSqlGetReader(string SQL) { SqlConnection Conn = ReturnConn(); SqlCommand Cmd; Cmd = CreateCmd(SQL, Conn); SqlDataReader Dr; try { Dr = Cmd.ExecuteReader(CommandBehavior.Default); } catch { throw new Exception(SQL); } return Dr; } /// <summary> /// 运行SQL语句,返回DataSet对象 /// </summary> /// <param name="procName">SQL语句</param> /// <param name="prams">DataSet对象</param> public DataSet ExecSqlGetDs(string SQL) { return ExecSql(SQL,null); } /// <summary> /// 检验是否存在数据 /// </summary> /// <returns></returns> public bool ExistDate(string SQL) { SqlConnection Conn = ReturnConn(); SqlDataReader Dr; Dr = CreateCmd(SQL, Conn).ExecuteReader(); if (Dr.Read()) { Dispose(Conn); return true; } else { Dispose(Conn); return false; } } /// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary> /// <param name="SQLStringList">多条SQL语句</param> public void ExecSqlTran(ArrayList SQLStringList) { using (SqlConnection conn = ReturnConn()) { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (System.Data.SqlClient.SqlException E) { tx.Rollback(); throw new Exception(E.Message); } } } /// <summary> /// 返回SQL语句执行结果的第一行第一列 /// </summary> /// <returns>object对象</returns> public object ReturnValue(string SQL) { return ReturnValue(SQL,0); } /// <summary> /// 返回SQL语句第一行,第ColumnI列 从0开始 /// </summary> /// <returns>字符串</returns> public object ReturnValue(string SQL, int ColumnI) { object result = null; try { SqlDataReader Dr = ExecSqlGetReader(SQL); if (Dr.Read()) { result = Dr[ColumnI]; } } catch { throw new Exception(SQL); } return result; } /// <summary> /// 执行查询语句,返回DataSet /// </summary> /// <param name="SQLString">查询语句</param> /// <param name="cmdParms">SQL语句用到的参数数组或null</param> /// <returns>DataSet</returns> public DataSet ExecSql(string SQLString, params SqlParameter[] cmdParms) { using (SqlConnection connection = ReturnConn()) { SqlCommand cmd = CreateCmd(SQLString, cmdParms, CommandType.Text); SqlDataAdapter da = new SqlDataAdapter(cmd); { DataSet ds = new DataSet(); try { da.Fill(ds); cmd.Parameters.Clear(); } catch (System.Data.SqlClient.SqlException ex) { throw new Exception(ex.Message); } return ds; } } } /// <summary> /// 运行存储过程,返回dataset /// </summary> /// <param name="procName">存储过程名.</param> /// <param name="prams">存储过程入参数组.</param> /// <returns>dataset对象.</returns> public DataSet ExecProc(string procName, SqlParameter[] prams) { SqlCommand Cmd = CreateCmd(procName, prams,CommandType.StoredProcedure); DataSet Ds = new DataSet(); SqlDataAdapter Da = new SqlDataAdapter(Cmd); try { Da.Fill(Ds); } catch (Exception Ex) { throw Ex; } return Ds; } /// <summary> /// 生成一个存储过程使用的sqlcommand. /// </summary> /// <param name="procName">存储过程名.</param> /// <param name="prams">存储过程入参数组.</param> /// <param name="type">sql的类型</param> /// <returns>sqlcommand对象.</returns> public SqlCommand CreateCmd(string Sql, SqlParameter[] prams,CommandType type) { SqlConnection Conn; Conn = ReturnConn(); SqlCommand Cmd = new SqlCommand(Sql, Conn); Cmd.CommandType = type; if (prams != null) { foreach (SqlParameter parameter in prams) { if (parameter != null) { Cmd.Parameters.Add(parameter); } } } return Cmd; } /// <summary> /// 生成Command对象 /// </summary> /// <param name="SQL"></param> /// <param name="Conn"></param> /// <returns></returns> public SqlCommand CreateCmd(string SQL, SqlConnection Conn) { SqlCommand Cmd; Cmd = new SqlCommand(SQL, Conn); return Cmd; } } }
未完全测试,持续更新中...