429 lines
14 KiB
C#
429 lines
14 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// MySql连接枚举
|
|
/// </summary>
|
|
public enum MySqlConnectionString
|
|
{
|
|
CRMRESMYSQLConn,
|
|
}
|
|
#region 私有变量
|
|
private const string defaultConfigKeyName = "DbHelper";//连接字符串 默认Key
|
|
private string connectionString;
|
|
private string providerName;
|
|
|
|
#endregion
|
|
|
|
#region 构造函数
|
|
|
|
/// <summary>
|
|
/// 默认构造函数(DbHelper)
|
|
/// </summary>
|
|
public MySqlDbHelper()
|
|
{
|
|
this.connectionString = ConfigurationManager.ConnectionStrings["DbHelper"].ConnectionString;
|
|
this.providerName = ConfigurationManager.ConnectionStrings["DbHelper"].ProviderName;
|
|
}
|
|
|
|
/// <summary>
|
|
/// DbHelper构造函数
|
|
/// </summary>
|
|
/// <param name="keyName">连接字符串名</param>
|
|
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<IDictionary<string, object>> ExecuteDataDictionary(string sql, params MySqlParameter[] parameters)
|
|
{
|
|
|
|
IList<IDictionary<string, object>> result = new List<IDictionary<string, object>>();
|
|
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<string, object> r = new Dictionary<string, object>();
|
|
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<IDictionary<string, object>> ExecuteDataDictionary(string sql, int timeout = 15, params MySqlParameter[] parameters)
|
|
{
|
|
|
|
IList<IDictionary<string, object>> result = new List<IDictionary<string, object>>();
|
|
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<string, object> r = new Dictionary<string, object>();
|
|
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<IDictionary<string, string>> 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<string> colVal = new List<string>();
|
|
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<T> QueryEntitys<T>(string sql, params MySqlParameter[] parameters) where T : new()
|
|
{
|
|
IList<T> result = new List<T>();
|
|
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));
|
|
a?.SetValue(r, row[key]);
|
|
}
|
|
result.Add(r);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw;
|
|
}
|
|
finally
|
|
{
|
|
if (con != null)
|
|
con.Close();
|
|
if (cmd != null)
|
|
cmd.Dispose();
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
}
|