using Dapper; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using MySql.Data.MySqlClient; using System.Linq; using System.Data.SqlClient; using System.Collections; using System.Reflection; namespace JY.DAL { public class SqlHelper where T : class { /// /// 数据库连接字符串 /// private static readonly string connectionString = ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString; /// /// 查询列表 /// /// 查询的sql /// 替换参数 /// public static List Query(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.Query(sql, param).ToList(); } } /// /// 查询第一个数据 /// /// /// /// public static T QueryFirst(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.QueryFirst(sql, param); } } /// /// 查询第一个数据没有返回默认值 /// /// /// /// public static T QueryFirstOrDefault(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.QueryFirstOrDefault(sql, param); } } /// /// 查询单条数据 /// /// /// /// public static T QuerySingle(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.QuerySingle(sql, param); } } /// /// 查询单条数据没有返回默认值 /// /// /// /// public static T QuerySingleOrDefault(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.QuerySingleOrDefault(sql, param); } } /// /// 增删改 /// /// /// /// Number of rows affected public static int Execute(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.Execute(sql, param); } } /// /// Reader获取数据 /// /// /// /// public static IDataReader ExecuteReader(string sql, object param) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.ExecuteReader(sql, param); } } /// /// 获取数据返回DataTable /// /// /// /// public static DataTable QueryTable(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { DataTable table = new DataTable(); var reader = con.ExecuteReader(sql, param); table.Load(reader); return table; } } /// /// Scalar获取数据 /// /// /// /// public static object ExecuteScalar(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.ExecuteScalar(sql, param); } } /// /// Scalar获取数据 /// /// /// /// public static T ExecuteScalarForT(string sql, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { return con.ExecuteScalar(sql, param); } } /// /// 带参数的存储过程 /// /// /// /// public static List ExecutePro(string proc, object param = null) { using (SqlConnection con = new SqlConnection(connectionString)) { List list = con.Query(proc, param, null, true, null, CommandType.StoredProcedure).ToList(); return list; } } /// /// 批量插入T数据,返回影响行数 /// /// 对象集合 /// 影响行数 public static int Insert(string strsql, List list) { using (IDbConnection connection = new SqlConnection(connectionString)) { //return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", list); return connection.Execute(strsql, list); } } /// /// list to datatable /// /// /// /// public static DataTable ListToDt(IEnumerable collection) { var props = typeof(T).GetProperties(); var dt = new DataTable(); dt.Columns.AddRange(props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray()); if (collection.Count() > 0) { for (int i = 0; i < collection.Count(); i++) { ArrayList tempList = new ArrayList(); foreach (PropertyInfo pi in props) { object obj = pi.GetValue(collection.ElementAt(i), null); tempList.Add(obj); } object[] array = tempList.ToArray(); dt.LoadDataRow(array, true); } } return dt; } /// /// 批量插入SqlBulkCopy /// /// /// 表名 public static void BatchInsertBySqlBulkCopy(DataTable dt, string tableName) { using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString)) { sbc.BatchSize = dt.Rows.Count; sbc.BulkCopyTimeout = 10; sbc.DestinationTableName = tableName; sbc.ColumnMappings.Clear(); //sbc.ColumnMappings.Add("CustomerID", "CustomerID"); //sbc.ColumnMappings.Add("FirstName", "FirstName"); //sbc.ColumnMappings.Add("LastName", "LastName"); //sbc.ColumnMappings.Add("Address1", "Address1"); //sbc.ColumnMappings.Add("Address2", "Address2"); for (int i = 0; i < dt.Columns.Count; i++) { sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } //全部写入数据库 sbc.WriteToServer(dt); } } /// /// 批量插入数据 /// /// public static int BulkToDB(string tableName, List list) { //int result = 0; DataTable dt = ListToDt(list); BatchInsertBySqlBulkCopy(dt, tableName); return 1; } /// /// 事务1 - 全SQL /// /// 多条SQL /// param /// public static int ExecuteTransaction(string[] sqlarr) { using (SqlConnection con = new SqlConnection(connectionString)) { con.Open(); using (var transaction = con.BeginTransaction()) { try { int result = 0; foreach (var sql in sqlarr) { result += con.Execute(sql, null, transaction); } transaction.Commit(); return result; } catch (Exception ex) { transaction.Rollback(); throw ex; } finally { con.Close(); } } } } /// /// 事务2 - 声明参数 ///demo: ///dic.Add("Insert into Users values (@UserName, @Email, @Address)", /// new { UserName = "jack", Email = "380234234@qq.com", Address = "上海" }); /// /// 多条SQL /// param /// public static int ExecuteTransaction(Dictionary dic) { using (SqlConnection con = new SqlConnection(connectionString)) { con.Open(); using (var transaction = con.BeginTransaction()) { try { int result = 0; foreach (var sql in dic) { result += con.Execute(sql.Key, sql.Value, transaction); } transaction.Commit(); return result; } catch (Exception ex) { transaction.Rollback(); throw ex; } finally { con.Close(); } } } } } }