using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace XS_DAL { public class DBHelper { /// /// 连接字符串 /// string dbConnectionString; /// /// 数据库提供程序的固定名称 /// string dbProviderName; /// /// 数据库类型 /// string dbType; /// /// 构造方法 /// /// 连接字符串 /// 数据库提供程序固定名称 public DBHelper(string dbConnectionString, string dbProviderName) { this.dbConnectionString = dbConnectionString; this.dbProviderName = dbProviderName; } /// /// 创建数据库连接 /// /// private DbConnection CreateConnection() { DbProviderFactory dbFactory = DbProviderFactories.GetFactory(dbProviderName); DbConnection dbConnection = dbFactory.CreateConnection(); dbConnection.ConnectionString = dbConnectionString; return dbConnection; } /// /// 创建数据库适配器 /// /// private DbDataAdapter CreateDataAdapter() { DbProviderFactory dbFactory = DbProviderFactories.GetFactory(dbProviderName); DbDataAdapter dbDataAdapter = dbFactory.CreateDataAdapter(); return dbDataAdapter; } /// /// 测试数据是否正常连接 /// /// public bool IsDbConnected() { using (DbConnection dbConnection = CreateConnection()) { dbConnection.Open(); return true; } } /// /// 使用事务执行SQL语句返回受影响的行数 /// /// SQL语句 /// public int ExecuteNonQuery(string sql) { using (DbConnection dbConnection = CreateConnection()) { using (DbCommand dbCommand = dbConnection.CreateCommand()) { dbCommand.CommandType = CommandType.Text; dbCommand.CommandText = sql; dbCommand.Connection.Open(); using (DbTransaction dbTransaction = dbCommand.Connection.BeginTransaction()) { try { dbCommand.Transaction = dbTransaction; int result = dbCommand.ExecuteNonQuery(); dbTransaction.Commit(); return result; } catch (Exception) { dbTransaction.Rollback(); throw; } } } } } /// /// 使用事务执行多条SQL语句返回受影响的总行数 /// /// SQL语句 /// public int ExecuteNonQuery(List sqls) { using (DbConnection dbConnection = CreateConnection()) { using (DbCommand dbCommand = dbConnection.CreateCommand()) { dbCommand.CommandType = CommandType.Text; dbCommand.Connection.Open(); using (DbTransaction dbTransaction = dbCommand.Connection.BeginTransaction()) { try { dbCommand.Transaction = dbTransaction; int result = 0; for (int i = 0; i < sqls.Count; i++) { dbCommand.CommandText = sqls[i]; result += dbCommand.ExecuteNonQuery(); } dbCommand.Transaction.Commit(); return result; } catch (Exception) { dbCommand.Transaction.Rollback(); throw; } } } } } /// /// 执行带参数存储过程返回受影响的行数 /// /// 存储过程名 /// 参数列表 /// public int ExecuteNonQuery(string spt, ref List dbParameters) { using (DbConnection dbConnection = CreateConnection()) { using (DbCommand dbCommand = dbConnection.CreateCommand()) { dbCommand.CommandText = spt; dbCommand.CommandType = CommandType.StoredProcedure; foreach (var item in dbParameters) { if ((item.Direction == ParameterDirection.Input || item.Direction == ParameterDirection.InputOutput) && item.Value == null) { item.Value = DBNull.Value; } dbCommand.Parameters.Add(item); } dbCommand.Connection.Open(); int result = dbCommand.ExecuteNonQuery(); return result; } } } /// /// 执行SQL语句返回第一行第列 /// /// SQL语句 /// public object ExecuteScalar(string sql) { using (DbConnection dbConnection = CreateConnection()) { using (DbCommand dbCommand = dbConnection.CreateCommand()) { dbCommand.CommandType = CommandType.Text; dbCommand.CommandText = sql; dbCommand.Connection.Open(); return dbCommand.ExecuteScalar(); } } } /// /// 执行SQL语句返回数据表 /// /// SQL语句 /// public DataTable GetDataTable(string sql) { using (DbConnection dbConnection = CreateConnection()) { using (DbCommand dbCommand = dbConnection.CreateCommand()) { dbCommand.CommandType = CommandType.Text; dbCommand.CommandText = sql; dbCommand.Connection.Open(); DbDataAdapter dbDataAdapter = CreateDataAdapter(); dbDataAdapter.SelectCommand = dbCommand; DataSet ds = new DataSet(); dbDataAdapter.Fill(ds); return ds.Tables[0]; } } } } }