using System; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Configuration; using System.Data.Common; using Epost.Common; namespace Epost.DAL { /// /// 数据访问基础类 /// public class DB { protected static string connectionString = ConfigurationManager.ConnectionStrings["SqlLocDPSConnection"].ConnectionString; DbProviderFactory provider; public DB() { provider = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["SqlLocDPSConnection"].ProviderName); } #region 执行简单SQL语句 /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public int ExecuteSql(string SQLString) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; using (DbCommand cmd = provider.CreateCommand()) { cmd.Connection = connection; cmd.CommandText = SQLString; try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); return 0; //throw new Exception(ex.Message); } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// 多条SQL语句 public void ExecuteSqlTran(ArrayList SQLStringList) { using (DbConnection conn = provider.CreateConnection()) { conn.ConnectionString = connectionString; conn.Open(); using (DbCommand cmd = provider.CreateCommand()) { cmd.Connection = conn; using (DbTransaction 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 (DbException ex) { tx.Rollback(); conn.Close(); conn.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); //throw ex; } } } } } /// /// 执行一条计算查询结果语句,返回查询结果(object)。 /// /// 计算查询结果语句 /// 查询结果(object) public object GetSingle(string SQLString) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; using (DbCommand cmd = provider.CreateCommand()) { cmd.Connection = connection; cmd.CommandText = SQLString; try { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); // throw new Exception(ex.Message); return null; } } } } /// /// 执行查询语句,返回SqlDataReader /// /// 查询语句 /// SqlDataReader public DbDataReader ExecuteReader(string strSQL) { DbConnection connection = provider.CreateConnection(); connection.ConnectionString = connectionString; DbCommand cmd = provider.CreateCommand(); cmd.Connection = connection; cmd.CommandText = strSQL; try { connection.Open(); DbDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return myReader; } catch (System.Data.Common.DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); //throw new Exception(ex.Message); return null; } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public DataSet GetDataSet(string SQLString) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; using (DbCommand cmd = provider.CreateCommand()) { cmd.Connection = connection; cmd.CommandText = SQLString; try { DataSet ds = new DataSet(); DbDataAdapter adapter = provider.CreateDataAdapter(); adapter.SelectCommand = cmd; adapter.Fill(ds, "ds"); return ds; } catch (DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!"+ ex.Message); //throw new Exception(ex.Message); return null; } } } } #endregion #region 执行带参数的SQL语句 /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public int ExecuteSql(string SQLString, DbParameter[] cmdParms) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; using (DbCommand cmd = provider.CreateCommand()) { cmd.Connection = connection; cmd.CommandText = SQLString; try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } catch (DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); //throw new Exception(ex.Message); return 0; } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[]) public void ExecuteSqlTran(Hashtable SQLStringList) { using (DbConnection conn = provider.CreateConnection()) { conn.ConnectionString = connectionString; conn.Open(); using (DbTransaction trans = conn.BeginTransaction()) { using (DbCommand cmd = provider.CreateCommand()) { try { //循环 foreach (DictionaryEntry myDE in SQLStringList) { string cmdText = myDE.Key.ToString(); DbParameter[] cmdParms = (DbParameter[])myDE.Value; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); } catch (DbException ex) { trans.Rollback(); conn.Close(); conn.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); //throw ex; } } } } } /// /// 执行一条计算查询结果语句,返回查询结果(object),返回首行首列的值; /// /// 计算查询结果语句 /// 查询结果(object) public object GetSingle(string SQLString, DbParameter[] cmdParms) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; using (DbCommand cmd = provider.CreateCommand()) { try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); //throw new Exception(ex.Message); return null; } } } } /// /// 执行查询语句,返回SqlDataReader /// /// 查询语句 /// SqlDataReader public DbDataReader ExecuteReader(string SQLString, DbParameter[] cmdParms) { DbConnection connection = provider.CreateConnection(); connection.ConnectionString = connectionString; DbCommand cmd = provider.CreateCommand(); try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); DbDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return myReader; } catch (DbException e) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + e.Message); //throw new Exception(e.Message); return null; } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public DataSet GetDataSet(string SQLString, DbParameter[] cmdParms) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; using (DbCommand cmd = provider.CreateCommand()) { using (DbDataAdapter da = provider.CreateDataAdapter()) { PrepareCommand(cmd, connection, null, SQLString, cmdParms); da.SelectCommand = cmd; DataSet ds = new DataSet(); try { da.Fill(ds, "ds"); cmd.Parameters.Clear(); return ds; } catch (DbException ex) { connection.Close(); connection.Dispose(); LogHelper.WriteLogInfo("数据库连接异常!" + ex.Message); // throw new Exception(ex.Message); return null; } } } } } private void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, string cmdText, DbParameter[] cmdParms) { if (conn.State != ConnectionState.Open) { conn.Open(); } cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) { cmd.Transaction = trans; } cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { foreach (DbParameter parm in cmdParms) { cmd.Parameters.Add(parm); } } } #endregion #region 存储过程操作 /// /// 执行存储过程; /// /// 存储过程名 /// 所需要的参数 /// 返回受影响的行数 public int RunProcedureExecuteSql(string storeProcName, DbParameter[] parameters) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; DbCommand cmd = BuildQueryCommand(connection, storeProcName, parameters); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); connection.Close(); return rows; } } /// /// 执行存储过程,返回首行首列的值 /// /// 存储过程名 /// 存储过程参数 /// 返回首行首列的值 public Object RunProcedureGetSingle(string storeProcName, DbParameter[] parameters) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; try { DbCommand cmd = BuildQueryCommand(connection, storeProcName, parameters); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (DbException e) { connection.Close(); connection.Dispose(); //throw new Exception(e.Message); return null; } } } /// /// 执行存储过程 /// /// 存储过程名 /// 存储过程参数 /// SqlDataReader public DbDataReader RunProcedureGetDataReader(string storedProcName, DbParameter[] parameters) { DbConnection connection = provider.CreateConnection(); connection.ConnectionString = connectionString; DbDataReader returnReader; DbCommand cmd = BuildQueryCommand(connection, storedProcName, parameters); cmd.CommandType = CommandType.StoredProcedure; returnReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return returnReader; } /// /// 执行存储过程 /// /// 存储过程名 /// 存储过程参数 /// DataSet public DataSet RunProcedureGetDataSet(string storedProcName, DbParameter[] parameters) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; DataSet dataSet = new DataSet(); DbDataAdapter sqlDA = provider.CreateDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet); sqlDA.SelectCommand.Parameters.Clear(); sqlDA.Dispose(); return dataSet; } } /// /// 执行多个存储过程,实现数据库事务。 /// /// 存储过程的哈希表(value为存储过程语句,key是该语句的DbParameter[]) public bool RunProcedureTran(Hashtable SQLStringList) { using (DbConnection connection = provider.CreateConnection()) { connection.ConnectionString = connectionString; connection.Open(); using (DbTransaction trans = connection.BeginTransaction()) { using (DbCommand cmd = provider.CreateCommand()) { try { //循环 foreach (DictionaryEntry myDE in SQLStringList) { cmd.Connection = connection; string storeName = myDE.Value.ToString(); DbParameter[] cmdParms = (DbParameter[])myDE.Key; cmd.Transaction = trans; cmd.CommandText = storeName; cmd.CommandType = CommandType.StoredProcedure; if (cmdParms != null) { foreach (DbParameter parameter in cmdParms) { cmd.Parameters.Add(parameter); } } int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); return true; } catch { trans.Rollback(); connection.Close(); connection.Dispose(); return false; } } } } } /// /// 执行多个存储过程,实现数据库事务。 /// /// 存储过程的哈希表(value为存储过程语句,key是该语句的DbParameter[]) //public bool RunProcedureTran(C_HashTable SQLStringList) //{ // using (DbConnection connection = provider.CreateConnection()) // { // connection.ConnectionString = connectionString; // connection.Open(); // using (DbTransaction trans = connection.BeginTransaction()) // { // using (DbCommand cmd = provider.CreateCommand()) // { // try // { // //循环 // foreach (DbParameter[] cmdParms in SQLStringList.Keys) // { // cmd.Connection = connection; // string storeName = SQLStringList[cmdParms].ToString(); // cmd.Transaction = trans; // cmd.CommandText = storeName; // cmd.CommandType = CommandType.StoredProcedure; // if (cmdParms != null) // { // foreach (DbParameter parameter in cmdParms) // { // cmd.Parameters.Add(parameter); // } // } // int val = cmd.ExecuteNonQuery(); // cmd.Parameters.Clear(); // } // trans.Commit(); // return true; // } // catch // { // trans.Rollback(); // connection.Close(); // connection.Dispose(); // return false; // } // } // } // } //} /// /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) /// /// 数据库连接 /// 存储过程名 /// 存储过程参数 /// SqlCommand private DbCommand BuildQueryCommand(DbConnection connection, string storedProcName, DbParameter[] parameters) { if (connection.State != ConnectionState.Open) { connection.Open(); } DbCommand command = provider.CreateCommand(); command.CommandText = storedProcName; command.Connection = connection; command.CommandType = CommandType.StoredProcedure; if (parameters != null) { foreach (DbParameter parameter in parameters) { command.Parameters.Add(parameter); } } return command; } #endregion } }