c#中可以使用的sqlhelper类

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;
            }
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值