using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace CommonFunc { public class SqlServerDBHelper { //日志 public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private string dbConnStr; private SqlConnection dbConn = new SqlConnection(); SqlCommandBuilder sbBuilder = new SqlCommandBuilder(); //数据库连接 public string getDBConnStr() { return dbConnStr; } public SqlServerDBHelper(string initDBConnStr) { if (initDBConnStr == null || initDBConnStr.Length == 0) { log.WarnFormat("传入的数据库连接串为空!"); } dbConnStr = initDBConnStr; } /// /// 数据库连接 /// /// public bool connect() { bool bSucc = false; dbConn.Close(); dbConn.ConnectionString = dbConnStr; try { dbConn.Open(); bSucc = true; log.InfoFormat("数据库连接已打开!"); } catch (Exception ex) { log.WarnFormat("连接数据库时发生异常:" + ex.Message); } return bSucc; } public void close() { if (dbConn.State != ConnectionState.Closed) { dbConn.Close(); log.InfoFormat("数据库连接已关闭!"); } } public ConnectionState connectionState { get { return dbConn.State; } } public void CheckConnection() { if (dbConn.State == ConnectionState.Closed || dbConn.State == ConnectionState.Broken) { connect(); } else if (dbConn.State == ConnectionState.Connecting || dbConn.State == ConnectionState.Executing || dbConn.State == ConnectionState.Fetching) { // } } /// /// 执行SQL命令 返回DataSet /// /// sql命令 /// 执行类型 /// 参数 /// public DataSet getDataSet(string sql, params SqlParameter[] sqlparams) { CheckConnection(); DataSet ds = new DataSet(); using (SqlDataAdapter da = new SqlDataAdapter(sql, dbConn)) { try { if (sqlparams != null) { da.SelectCommand.Parameters.AddRange(sqlparams); } da.Fill(ds); //防止俩个函数使用同一个sqlparams导致的“另一个SqlParameterCollection中已包含SqlParameter”错误 da.SelectCommand.Parameters.Clear(); } catch (Exception ex) { log.WarnFormat("执行查询操作异常:" + ex.Message); } } return ds; } /// /// 执行sql(insert、delete、update)语句进行非查询操作 /// /// sql命令 /// 返回受影响行数 public int executeUpdate(string sql) { CheckConnection(); int rowCount = 0; using (SqlCommand cmd = new SqlCommand(sql, dbConn)) { try { rowCount = cmd.ExecuteNonQuery(); } catch (Exception ex) { log.WarnFormat("执行更新操作异常:{0}", ex.Message); } } return rowCount; } public int executeUpdate(string sql, params SqlParameter[] sqlparams) { CheckConnection(); int rowCount = 0; using (SqlCommand cmd = new SqlCommand(sql, dbConn)) { try { if (sqlparams != null) { cmd.Parameters.AddRange(sqlparams); } rowCount = cmd.ExecuteNonQuery(); } catch (Exception ex) { log.WarnFormat("执行更新操作异常:{0}", ex.Message); } } return rowCount; } /// /// 使用SqlDataAdapter.Update()更新数据 /// /// public void updateDataTable(DataTable dt, string selectSql, MissingSchemaAction msaOption = MissingSchemaAction.AddWithKey) { CheckConnection(); using (SqlDataAdapter da = new SqlDataAdapter()) { da.MissingSchemaAction = msaOption; using (SqlCommand cmd = new SqlCommand(selectSql, dbConn)) { da.SelectCommand = cmd; sbBuilder.DataAdapter = da; da.InsertCommand = da.InsertCommand; da.UpdateCommand = da.UpdateCommand; da.DeleteCommand = da.DeleteCommand; try { da.Update(dt); dt.AcceptChanges(); } catch (Exception ex) { log.WarnFormat("数据更新时发生异常{0},SQL:{1}", ex.Message, selectSql); } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// sql2000数据库 /// 多条SQL语句 public bool executeBatchSql(List sqlList) { CheckConnection(); bool isCommit = false; string currSql = string.Empty; SqlTransaction tx = dbConn.BeginTransaction(); SqlCommand cmd = new SqlCommand(); try { cmd.Connection = dbConn; cmd.Transaction = tx; for (int iLoop = 0; iLoop < sqlList.Count; iLoop++) { isCommit = false; currSql = sqlList[iLoop].Trim(); if (currSql.Length > 0) { cmd.CommandText = currSql; cmd.ExecuteNonQuery(); } } tx.Commit(); isCommit = true; } catch (System.Data.SqlClient.SqlException E) { tx.Rollback(); log.WarnFormat("执行事务过程中出现异常:{0},{1}", E.Message, currSql); } finally { cmd.Dispose(); } return isCommit; } public object getScalar(string sql, params SqlParameter[] sqlparams) { CheckConnection(); Object scaleValue = null; if (dbConn.State != ConnectionState.Open) { return null; } DataSet ds = new DataSet(); using (SqlDataAdapter da = new SqlDataAdapter(sql, dbConn)) { try { if (sqlparams != null) { da.SelectCommand.Parameters.AddRange(sqlparams); } da.Fill(ds); } catch (Exception ex) { log.WarnFormat("执行查询操作异常{0},SQL:{1},{2}", ex.Message, sql, sqlparams); } } try { if (ds.Tables[0].Rows.Count > 0) { scaleValue = ds.Tables[0].Rows[0][0]; } } catch (Exception ex) { log.WarnFormat("获取标量值发生异常{0}", ex.Message); } return scaleValue; } } }