using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; namespace WX.CRM.DAL { public class MySqlDbHelper { /// /// MySql连接枚举 /// public enum MySqlConnectionString { CRMRESMYSQLConn, } #region 私有变量 private const string defaultConfigKeyName = "DbHelper";//连接字符串 默认Key private string connectionString; private string providerName; #endregion #region 构造函数 /// /// 默认构造函数(DbHelper) /// public MySqlDbHelper() { this.connectionString = ConfigurationManager.ConnectionStrings["DbHelper"].ConnectionString; this.providerName = ConfigurationManager.ConnectionStrings["DbHelper"].ProviderName; } /// /// DbHelper构造函数 /// /// 连接字符串名 public MySqlDbHelper(string keyName) { this.connectionString = ConfigurationManager.ConnectionStrings[keyName].ConnectionString; this.providerName = ConfigurationManager.ConnectionStrings[keyName].ProviderName; } public MySqlDbHelper(MySqlConnectionString conn) { switch (conn) { case MySqlConnectionString.CRMRESMYSQLConn: this.connectionString = WX.CRM.Model.ConStringHelper.CRMRESMYSQLConn; this.providerName = ConfigurationManager.ConnectionStrings[conn.ToString()].ProviderName; break; default: this.connectionString = WX.CRM.Model.ConStringHelper.CRMRESMYSQLConn; break; } } #endregion public int ExecuteNonQuery(string sql, params MySqlParameter[] parameters) { MySqlConnection con = new MySqlConnection(connectionString); int res = 0; try { con.Open(); MySqlCommand cmd = new MySqlCommand(sql, con); foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } try { res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { cmd.Dispose(); } } catch (Exception e) { throw; } finally { con.Close(); } return res; } public int ExecuteNonQuery(string sql, int timeOut = 30, params MySqlParameter[] parameters) { MySqlConnection con = new MySqlConnection(connectionString); int res = 0; try { con.Open(); MySqlCommand cmd = new MySqlCommand(sql, con); foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } try { cmd.CommandTimeout = timeOut * 1000;//自定义超时时间 res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { cmd.Dispose(); } } catch (Exception e) { throw; } finally { con.Close(); } return res; } public object ExecuteScalar(string sql, params MySqlParameter[] parameters) { MySqlConnection con = new MySqlConnection(connectionString); con.Open(); MySqlCommand cmd = new MySqlCommand(sql, con); if (parameters != null) foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } object res = cmd.ExecuteScalar(); cmd.Dispose(); con.Close(); return res; } public DataSet ExecuteDataTable(string sql, params MySqlParameter[] parameters) { DataSet dataset = new DataSet(); MySqlConnection con = new MySqlConnection(connectionString); MySqlCommand cmd = null; try { con.Open(); cmd = new MySqlCommand(sql, con); foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } //dataset放执行后的数据集合 MySqlDataAdapter adapter = new MySqlDataAdapter(cmd); adapter.Fill(dataset); } catch (Exception) { throw; } finally { if (con != null) con.Close(); if (cmd != null) cmd.Dispose(); } return dataset; } public IList> ExecuteDataDictionary(string sql, params MySqlParameter[] parameters) { IList> result = new List>(); MySqlConnection con = new MySqlConnection(connectionString); MySqlCommand cmd = null; try { DataSet ds = new DataSet(); con.Open(); cmd = new MySqlCommand(sql, con); foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } MySqlDataAdapter adapter = new MySqlDataAdapter(cmd); adapter.Fill(ds); //格式转换 if (ds.Tables.Count > 0) { var table = ds.Tables[0]; var columns = table.Columns; foreach (DataRow row in table.Rows) { IDictionary r = new Dictionary(); foreach (var col in columns) { var colName = col.ToString(); if (!r.ContainsKey(colName)) { r.Add(col.ToString(), row[col.ToString()]); } } result.Add(r); } } } catch (Exception) { throw; } finally { if (con != null) con.Close(); if (cmd != null) cmd.Dispose(); } return result; } public IList> ExecuteDataDictionary(string sql, int timeout = 15, params MySqlParameter[] parameters) { IList> result = new List>(); MySqlConnection con = new MySqlConnection(connectionString); MySqlCommand cmd = null; try { DataSet ds = new DataSet(); con.Open(); cmd = new MySqlCommand(sql, con); foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } cmd.CommandTimeout = timeout * 1000; MySqlDataAdapter adapter = new MySqlDataAdapter(cmd); adapter.Fill(ds); //格式转换 if (ds.Tables.Count > 0) { var table = ds.Tables[0]; var columns = table.Columns; foreach (DataRow row in table.Rows) { IDictionary r = new Dictionary(); foreach (var col in columns) { var colName = col.ToString(); if (!r.ContainsKey(colName)) { r.Add(col.ToString(), row[col.ToString()]); } } result.Add(r); } } } catch (Exception) { throw; } finally { if (con != null) con.Close(); if (cmd != null) cmd.Dispose(); } return result; } private static void CreateCSVfile(DataTable dtable, string csvrpath) { StreamWriter sw = new StreamWriter(csvrpath, false); int icolcount = dtable.Columns.Count; foreach (DataRow drow in dtable.Rows) { for (int i = 0; i < icolcount; i++) { if (!Convert.IsDBNull(drow[i])) { sw.Write(drow[i].ToString()); } if (i < icolcount - 1) { sw.Write(","); } } sw.Write(sw.NewLine); } sw.Close(); sw.Dispose(); } public void BulkInsert(DataTable dt, string tblName) { string csvrpath = "c:/tmp.csvr"; CreateCSVfile(dt, csvrpath); using (MySqlConnection cn1 = new MySqlConnection(connectionString)) { cn1.Open(); MySqlBulkLoader bcp1 = new MySqlBulkLoader(cn1); bcp1.TableName = tblName; //Create ProductOrder table into MYSQL database... bcp1.FieldTerminator = ","; bcp1.LineTerminator = "\r\n"; bcp1.FileName = csvrpath; bcp1.NumberOfLinesToSkip = 0; bcp1.Load(); //Once data write into db then delete file.. } } public int InsertBigList(IList> data, string tabName) { var baseDir = AppDomain.CurrentDomain.BaseDirectory; if (!Directory.Exists(Path.Combine(baseDir, "App_Data"))) { Directory.CreateDirectory(Path.Combine(baseDir, "App_Data")); } var filePath = Path.Combine(Path.Combine(baseDir, "App_Data"), Path.GetRandomFileName() + ".csv"); File.Create(filePath).Close(); using (var sw = new StreamWriter(filePath)) { //将数据写入文件 foreach (var item in data) { List colVal = new List(); foreach (var key in item.Keys) { colVal.Add($"\"{item[key]?.Replace("\"", "'").Replace("\r\n", "")}\"");//可行 } sw.WriteLine(string.Join(",", colVal)); } } //批量插入 //创建一个MySqlCommand对象 MySqlCommand cmd = new MySqlCommand(); var res = 0; using (MySqlConnection conn = new MySqlConnection(connectionString)) { var bulk = new MySqlBulkLoader(conn) { FieldTerminator = ",",//这个地方字段间的间隔方式,为逗号 FieldQuotationCharacter = '"', EscapeCharacter = '"', LineTerminator = "\r\n",//每行 FileName = filePath,//文件地址 NumberOfLinesToSkip = 0, TableName = tabName }; ExecuteScalar("set global local_infile = 'ON';", null);//打开批量插入限制 res = bulk.Load(); } //写入完成删除文件 File.Delete(filePath); return res;//返回插入成功条数 } public IList QueryEntitys(string sql, params MySqlParameter[] parameters) where T : new() { IList result = new List(); MySqlConnection con = new MySqlConnection(connectionString); MySqlCommand cmd = null; try { DataSet ds = new DataSet(); con.Open(); cmd = new MySqlCommand(sql, con); foreach (MySqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } MySqlDataAdapter adapter = new MySqlDataAdapter(cmd); adapter.Fill(ds); //格式转换 if (ds.Tables.Count > 0) { var table = ds.Tables[0]; var columns = table.Columns; var type = typeof(T); var attrs = type.GetProperties(); foreach (DataRow row in table.Rows) { T r = new T(); foreach (var col in columns) { var key = col.ToString(); var a = attrs.FirstOrDefault(m => m.Name.Equals(key, StringComparison.InvariantCultureIgnoreCase)); if (Convert.IsDBNull(row[key])) { a?.SetValue(r, null); } else { a?.SetValue(r, row[key]); } } result.Add(r); } } } catch (Exception ex) { throw; } finally { if (con != null) con.Close(); if (cmd != null) cmd.Dispose(); } return result; } } }