using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlTypes;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Test.DButility
{
public class DBHelperSQL
{
#region 程序级应用变量
public static string connectionString = "charset='utf8';pooling=true;SSLMode=none;Data Source='" + ConfigurationManager.AppSettings["Conn_server"] + "';"
+ "Database='" + ConfigurationManager.AppSettings["Conn_database"] + "';"
+ "Port=" + ConfigurationManager.AppSettings["Conn_port"] + ";"
+ "User Id='" + ConfigurationManager.AppSettings["Conn_uid"] + "';"
+ "Password='" + ConfigurationManager.AppSettings["Conn_pwd"] + "';"
+ "Allow User Variables = True;";
public static int Result = 0;
#endregion
public DataTable fsQuery(string strSQL)
{
return GetDataSet(CommandType.Text, strSQL, null).Tables[0];
}
public DataTable QueryLongTime(string strSQL)
{
return GetDataSetLongTime(CommandType.Text, strSQL, null).Tables[0];
}
public DataSet GetDataSetLongTime(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
//创建一个MySqlCommand对象
MySqlCommand cmd = new MySqlCommand();
cmd.CommandTimeout = 30;
//创建一个MySqlConnection对象
MySqlConnection conn = new MySqlConnection(connectionString);
try
{
//调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
//调用 MySqlCommand 的 ExecuteReader 方法
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
//清除参数
cmd.Parameters.Clear();
conn.Dispose();
conn.Close();
return ds;
}
catch (Exception e)
{
conn.Dispose();
conn.Close();
throw;
}
}
public int fsExeSQL(string strSQL)
{
return ExecuteNonQuery(CommandType.Text, strSQL, null);
}
public int IsOpen()
{
try
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
try
{
conn.Open();
}
catch (Exception)
{
conn.Dispose();
conn.Close();
throw;
}
if (conn.State == ConnectionState.Open)
{
return 1;
}
else
{
return 0;
}
}
}
catch (Exception e)
{
return -1;
}
}
public int ExecuteNonQuery(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
MySqlCommand cmd = new MySqlCommand();
cmd.CommandTimeout = 15;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
private void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (MySqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
public static int ExistsCount(object obj, string table)
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("SELECT COUNT(*) FROM " + table + " WHERE");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.GetValue(obj, null) != null)
{
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "' AND " + "");
}
}
string start = sql.ToString() + " 1 = 1";
using (MySqlCommand cmd = new MySqlCommand(start, conn))
{
cmd.Connection = conn;
cmd.CommandText = start;
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
cmd.Parameters.Clear();
conn.Close();
var id = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
return id;
}
}
}
public static int IsExistsId(object obj, string table)
{
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("SELECT id FROM " + table + " WHERE");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.GetValue(obj, null) != null)
{
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "' AND " + "");
}
}
string start = sql.ToString() + " 1 = 1";
using (MySqlCommand cmd = new MySqlCommand(start, conn))
{
cmd.Connection = conn;
cmd.CommandText = start;
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
cmd.Parameters.Clear();
conn.Close();
if (ds.Tables[0].Rows.Count == 0)
{
return -1;
}
var id = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
return id;
}
}
}
public DataSet GetDataSet(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
{
//创建一个MySqlCommand对象
MySqlCommand cmd = new MySqlCommand();
cmd.CommandTimeout = 30;
//创建一个MySqlConnection对象
MySqlConnection conn = new MySqlConnection(connectionString);
try
{
//调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
//调用 MySqlCommand 的 ExecuteReader 方法
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
//清除参数
cmd.Parameters.Clear();
conn.Close();
conn.Dispose();
return ds;
}
catch (Exception e)
{
conn.Close();
conn.Dispose();
throw e;
}
}
/// <summary>
/// 执行一条计算查询结果语句,返回查询结果(object)。
/// </summary>
/// <param name="SQLString">计算查询结果语句</param>
/// <returns>查询结果(object)</returns>
public static object GetSingle(string SQLString)
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
{
try
{
connection.Open();
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
connection.Close();
throw e;
}
}
}
}
public static object GetSingle(string SQLString, int Times)
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
{
try
{
connection.Open();
cmd.CommandTimeout = Times;
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
connection.Close();
throw e;
}
}
}
}
public static int Insert(object obj)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
//string table = GetTableName(obj);
string table = GetTableName(obj);
sql.Append("INSERT INTO " + table + "(");
sqlend.Append(" VALUES (");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.Name.ToLower() != "id")
{
string columnValue = item.GetValue(obj, null) + "";
if (string.IsNullOrEmpty(columnValue))
{
continue;
}
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
continue;
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
//conn.Close();
}
return n;
}
public static int Save(object obj)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
//string table = GetTableName(obj);
string table = GetTableName(obj);
sql.Append("INSERT INTO " + table + " (");
sqlend.Append(" VALUES (");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.Name.ToLower() != "id")
{
string columnValue = item.GetValue(obj, null) + "";
if (string.IsNullOrEmpty(columnValue))
{
continue;
}
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
continue;
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
cmd.CommandTimeout = 15;
n = cmd.ExecuteNonQuery();
if (n > 0)
{
cmd.Connection = conn;
cmd.CommandText = "SELECT LAST_INSERT_ID();";
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
cmd.Parameters.Clear();
conn.Close();
var id = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
return id;
}
}
//conn.Close();
}
return n;
}
public static int Save(object obj, string table)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("INSERT INTO " + table + " (");
sqlend.Append(" VALUES (");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.Name.ToLower() != "id")
{
string columnValue = item.GetValue(obj, null) + "";
if (string.IsNullOrEmpty(columnValue))
{
continue;
}
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
continue;
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
cmd.CommandTimeout = 15;
n = cmd.ExecuteNonQuery();
if (n > 0)
{
cmd.Connection = conn;
cmd.CommandText = "SELECT LAST_INSERT_ID();";
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
cmd.Parameters.Clear();
conn.Close();
var id = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
return id;
}
}
//conn.Close();
}
return n;
}
public static int Insert(object obj, string table)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("INSERT INTO " + table + "(");
sqlend.Append(" VALUES (");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.Name.ToLower() != "id")
{
string columnValue = item.GetValue(obj, null) + "";
if (string.IsNullOrEmpty(columnValue))
{
continue;
}
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
continue;
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
public static int Delete(string table, object id)
{
string sql = @$"delete from {table} where id = {id}";
MySqlCommand cmd = new MySqlCommand();
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
conn.Close();
return val;
}
}
public static int Delete(object obj)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
string table = GetTableName(obj);
sql.Append("DELETE FROM" + table);
sqlend.Append(" WHERE");
foreach (PropertyInfo item in pro)
{
if (item.Name.ToLower() == "id")
{
sqlend.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'");
break;
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + " ";
string end = sqlend.ToString();
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
public static int Update(object obj, string table)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("UPDATE " + table + " set");
sqlend.Append("WHERE");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.GetValue(obj, null) != null)
{
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'," + "");
}
}
foreach (PropertyInfo item in pro)
{
if (item.Name.ToLower() == "id")
{
sqlend.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'");
break;
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + " ";
string end = sqlend.ToString();
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
public static int Update(object obj)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
string table = GetTableName(obj);
sql.Append("UPDATE " + table + " set");
sqlend.Append("WHERE");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.GetValue(obj, null) != null)
{
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'," + "");
}
}
foreach (PropertyInfo item in pro)
{
if (item.Name.ToLower() == "id")
{
sqlend.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'");
break;
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + " ";
string end = sqlend.ToString();
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
public static int UpdateNull(object obj)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
string table = GetTableName(obj);
sql.Append("UPDATE " + table + " set");
sqlend.Append("WHERE");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'," + "");
}
foreach (PropertyInfo item in pro)
{
if (item.Name.ToLower() == "id")
{
sqlend.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'");
break;
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + " ";
string end = sqlend.ToString();
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
public static int Update(object obj, string table, string where)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("UPDATE " + table + " set");
sqlend.Append("WHERE ");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.GetValue(obj, null) != null)
{
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'," + "");
}
}
sqlend.Append(where);
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + " ";
string end = sqlend.ToString();
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
public static int UpdateNull(object obj, string table, string where)
{
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("UPDATE " + table + " set");
sqlend.Append("WHERE ");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
sql.Append(" " + item.Name + "= '" + item.GetValue(obj, null) + "'," + "");
}
sqlend.Append(where);
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + " ";
string end = sqlend.ToString();
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
}
conn.Close();
}
return n;
}
//public static void Begin()
//{
// using (MySqlConnection conn = new MySqlConnection(connectionString))
// {
// conn.Open();
// using (MySqlCommand cmd = new MySqlCommand("Begin;", conn))
// {
// cmd.ExecuteNonQuery();
// conn.Close();
// }
// }
//}
//public static void RollBack()
//{
// using (MySqlConnection conn = new MySqlConnection(connectionString))
// {
// conn.Open();
// using (MySqlCommand cmd = new MySqlCommand("rollback;", conn))
// {
// cmd.ExecuteNonQuery();
// conn.Close();
// }
// }
//}
//public static void Commit()
//{
// using (MySqlConnection conn = new MySqlConnection(connectionString))
// {
// conn.Open();
// using (MySqlCommand cmd = new MySqlCommand("Commit;", conn))
// {
// cmd.ExecuteNonQuery();
// conn.Close();
// }
// }
//}
private static string GetTableName(object obj)
{
var pro = obj.GetType().ToString().Split('.');
string table = pro[pro.Length - 1].Replace("m_", "");
return table;
}
public static int GetNextId(object obj)
{
var table = GetTableName(obj);
int n = 0;
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
conn.Open();
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("INSERT INTO " + table + " (");
sqlend.Append(" VALUES (");
foreach (PropertyInfo item in pro)
{
if (item.Name == "TableName")
{
continue;
}
else if (item.Name.ToLower() != "id")
{
string columnValue = item.GetValue(obj, null) + "";
if (string.IsNullOrEmpty(columnValue))
{
continue;
}
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
continue;
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
}
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
using (MySqlCommand cmd = new MySqlCommand(sqltext, conn))
{
n = cmd.ExecuteNonQuery();
if (n > 0)
{
cmd.Connection = conn;
cmd.CommandText = "SELECT LAST_INSERT_ID();";
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
cmd.Parameters.Clear();
var id = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
var delete_sql = $"delete from {table} where id = {id}";
cmd.CommandText = delete_sql;
var del = cmd.ExecuteNonQuery();
conn.Close();
return id;
}
}
}
return Convert.ToInt32(0);
}
public static async Task<DataTable> QuerySqlAsync(string sql)
{
using (MySqlConnection myconn = new MySqlConnection(connectionString))
{
try
{
await myconn.OpenAsync();
using (MySqlCommand mycom = myconn.CreateCommand())
{
mycom.CommandText = sql;
MySqlDataAdapter adap = new MySqlDataAdapter(mycom);
DataSet ds = new DataSet();
await adap.FillAsync(ds);
await myconn.CloseAsync();
return ds.Tables[0];
}
}
catch (Exception e)
{
await myconn.CloseAsync();
myconn.Dispose();
return null;
}
}
}
public async static Task<object> ExecuteSqlAsync(string sqlText)
{
//在回调函数关闭数据库
MySqlConnection connection = null;
try
{
connection = new MySqlConnection();
connection.ConnectionString = connectionString;
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlText;
await connection.OpenAsync();
var result = cmd.BeginExecuteNonQuery(CallbackAsyncExecuteNonQuery, cmd);
return Result;
}
catch (Exception ex)
{
if (connection != null)
{
await connection.CloseAsync();
}
connection.Dispose();
return null;
}
}
public async static void CallbackAsyncExecuteNonQuery(IAsyncResult callBack)
{
MySqlCommand cmm = null;
try
{
cmm = (MySqlCommand)callBack.AsyncState;
if (cmm == null)
{
return;
}
Result = cmm.EndExecuteNonQuery(callBack);
}
catch (Exception ex)
{
if (cmm != null)
{
await cmm.Connection.CloseAsync();
cmm.Dispose();
}
else
{
}
}
finally
{
if (cmm != null && cmm.Connection != null && cmm.Connection.State != ConnectionState.Closed)
{
cmm.Dispose();
await cmm.Connection.CloseAsync();
}
}
}
public async static Task<int?> SaveAsync(object obj, string table)
{
//在回调函数关闭数据库
MySqlConnection connection = null;
try
{
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
//string table = GetTableName(obj);
sql.Append("INSERT INTO " + table + "(");
sqlend.Append(" VALUES (");
Parallel.ForEach(pro, item =>
{
string columnValue = item.GetValue(obj, null) + "";
if (!string.IsNullOrEmpty(columnValue))
{
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
{
return;
}
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
});
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
connection = new MySqlConnection();
connection.ConnectionString = connectionString;
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqltext;
await connection.OpenAsync();
var result = cmd.BeginExecuteNonQuery(CallbackSaveAsync, cmd);
if (result.IsCompleted)
{
cmd.Connection = connection;
cmd.CommandText = "SELECT LAST_INSERT_ID();";
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
adapter.Fill(ds);
cmd.Parameters.Clear();
connection.Close();
Result = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
}
return Result;
}
catch (Exception ex)
{
if (connection != null)
{
await connection.CloseAsync();
}
connection.Dispose();
return null;
}
}
public async static void CallbackSaveAsync(IAsyncResult callBack)
{
MySqlCommand cmd = null;
try
{
cmd = (MySqlCommand)callBack.AsyncState;
if (cmd == null)
{
return;
}
if (cmd.EndExecuteNonQuery(callBack) > 0)
{
}
}
catch (Exception ex)
{
if (cmd != null)
{
await cmd.Connection.CloseAsync();
cmd.Dispose();
}
else
{
}
}
finally
{
if (cmd != null && cmd.Connection != null && cmd.Connection.State != ConnectionState.Closed)
{
cmd.Dispose();
await cmd.Connection.CloseAsync();
}
}
}
}
}
2.
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Tset.DButility
{
public delegate Task<int> AsyncMethodCaller(MySqlCommand cmd, MySqlConnection connection);
public class DBhelperAsync
{
#region 程序级应用变量
public static Exception Error = null;
public static string connectionString = "charset='utf8';pooling=true;SSLMode=none;Data Source='" + ConfigurationManager.AppSettings["Conn_server"] + "';"
+ "Database='" + ConfigurationManager.AppSettings["Conn_database"] + "';"
+ "Port=" + ConfigurationManager.AppSettings["Conn_port"] + ";"
+ "User Id='" + ConfigurationManager.AppSettings["Conn_uid"] + "';"
+ "Password='" + ConfigurationManager.AppSettings["Conn_pwd"] + "';";
#endregion
private static async Task<string> GetTableName(object obj)
{
string[] pro = null;
await Task.Run(() => pro = obj.GetType().ToString().Split('.')); string table = pro[pro.Length - 1].Replace("m_", ""); ;
return table;
}
public static async Task<DataTable> QuerySqlAsync(string sql)
{
using (MySqlConnection myconn = new MySqlConnection(connectionString))
{
try
{
await myconn.OpenAsync();
using (MySqlCommand mycom = myconn.CreateCommand())
{
mycom.CommandText = sql;
MySqlDataAdapter adap = new MySqlDataAdapter(mycom);
DataSet ds = new DataSet();
await adap.FillAsync(ds);
await myconn.CloseAsync();
return ds.Tables[0];
}
}
catch (Exception ex)
{
Error = ex;
await myconn.CloseAsync();
await myconn.DisposeAsync();
return null;
}
}
}
public async static Task<int> ExecuteSqlAsync(string sqlText)
{
//在回调函数关闭数据库
MySqlConnection connection = null;
try
{
connection = new MySqlConnection();
connection.ConnectionString = connectionString;
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlText;
await connection.OpenAsync();
var Execute_Count = cmd.ExecuteNonQuery();
await connection.CloseAsync();
return Execute_Count;
}
catch (Exception ex)
{
Error = ex;
if (connection != null)
{
await connection.CloseAsync();
}
await connection.DisposeAsync();
return -1;
}
}
public async static Task<int> SaveAsync(object obj, string table)
{
//在回调函数关闭数据库
MySqlConnection connection = null;
try
{
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
sql.Append("INSERT INTO " + table + "(");
sqlend.Append(" VALUES (");
Parallel.ForEach(pro, item =>
{
string columnValue = item.GetValue(obj, null) + "";
if (!string.IsNullOrEmpty(columnValue))
{
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
{
return;
}
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
});
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
connection = new MySqlConnection();
connection.ConnectionString = connectionString;
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqltext;
await connection.OpenAsync();
AsyncMethodCaller caller = new AsyncMethodCaller(GetLastInsertId);
var workTask = Task.Run(() => caller.Invoke(cmd, connection)).Result;
return workTask;
}
catch (Exception ex)
{
Error = ex;
if (connection != null)
{
await connection.CloseAsync();
}
await connection.DisposeAsync();
return -1;
}
}
public async static Task<int> SaveAsync(object obj)
{
//在回调函数关闭数据库
MySqlConnection connection = null;
try
{
StringBuilder sql = new StringBuilder();
StringBuilder sqlend = new StringBuilder();
PropertyInfo[] pro = obj.GetType().GetProperties();
string sqltext = string.Empty;
var table = await GetTableName(obj);
sql.Append("INSERT INTO " + table + "(");
sqlend.Append(" VALUES (");
Parallel.ForEach(pro, item =>
{
string columnValue = item.GetValue(obj, null) + "";
if (!string.IsNullOrEmpty(columnValue))
{
if (item.PropertyType == typeof(DateTime))
{
DateTime dt;
DateTime.TryParse(columnValue, out dt);
if (dt <= SqlDateTime.MinValue.Value)
{
return;
}
}
sql.Append(" " + item.Name + ",");
sqlend.Append(" '" + columnValue + "',");
}
});
string start = sql.ToString();
start = start.Substring(0, start.Length - 1) + ")";
string end = sqlend.ToString();
end = end.Substring(0, end.Length - 1) + ")";
sqltext = start + end;
connection = new MySqlConnection();
connection.ConnectionString = connectionString;
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqltext;
await connection.OpenAsync();
AsyncMethodCaller caller = new AsyncMethodCaller(GetLastInsertId);
var workTask = Task.Run(() => caller.Invoke(cmd, connection)).Result;
return workTask;
}
catch (Exception ex)
{
Error = ex;
if (connection != null)
{
await connection.CloseAsync();
}
await connection.DisposeAsync();
return -1;
}
}
private async static Task<int> GetLastInsertId(MySqlCommand cmd, MySqlConnection connection)
{
try
{
if (cmd.ExecuteNonQuery() > 0)
{
Stopwatch sw = new Stopwatch();
sw.Start();
cmd.Connection = connection;
cmd.CommandText = "SELECT LAST_INSERT_ID();";
cmd.CommandType = CommandType.Text;
MySqlDataAdapter adapter = new MySqlDataAdapter();
adapter.SelectCommand = cmd;
DataSet ds = new DataSet();
await adapter.FillAsync(ds);
cmd.Parameters.Clear();
//connection.Close();
await connection.CloseAsync();
await connection.DisposeAsync();
int id = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
sw.Stop();
return id;
}
return 0;
}
catch (Exception ex)
{
Error = ex;
await connection.CloseAsync();
await connection.DisposeAsync();
return -1;
}
}
}
}