using MySqlConnector;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CreateAccountBookConsole
{
    public class SqlHelper
    {
        public static DataSet ExecuteQuery(string sql, params MySqlParameter[] param)
        {
            DataSet ds = new DataSet();
            using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
            {
                try
                {
                    conn.Open();
                    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
                    {
                        if (param != null)
                            cmd.Parameters.AddRange(param);
                        MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                        da.Fill(ds);
                        if (param != null)
                            cmd.Parameters.Clear();
                        return ds;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        public static int ExecuteScalar(string sql, params MySqlParameter[] param)
        {
            using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    if (param != null)
                        cmd.Parameters.AddRange(param);
                    int affectCount = int.Parse(cmd.ExecuteScalar().ToString());
                    if (param != null)
                        cmd.Parameters.Clear();//添加这一句即可解决此问题
                    return affectCount;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        /// 
        /// 执行增、删、改的方法
        /// 
        /// 预计执行的非SELECT查询语句
        /// SQL语句中的可变参数
        /// 返回受影响的行数
        public static int ExecuteNonQuery(string sql, params MySqlParameter[] param)
        {
            using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    if (param != null)
                        cmd.Parameters.AddRange(param);
                    int affectCount = cmd.ExecuteNonQuery();
                    if (param != null)
                        cmd.Parameters.Clear();//添加这一句即可解决此问题
                    return affectCount;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        public static long ExecuteNonQueryAndGetLastInsertedId(string sql, params MySqlParameter[] param)
        {
            using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    if (param != null)
                        cmd.Parameters.AddRange(param);
                    int affectCount = cmd.ExecuteNonQuery();
                    if (param != null)
                        cmd.Parameters.Clear();
                    return cmd.LastInsertedId;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        public static bool ExecuteNonQueryList(List sqlList, List paramList)
        {
            using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString))
            {
                try
                {
                    conn.Open();
                    MySqlTransaction transaction = conn.BeginTransaction();
                    MySqlCommand cmd = conn.CreateCommand();
                    cmd.Transaction = transaction;
                    try
                    {
                        for (int i = 0; i < sqlList.Count; i++)
                        {
                            cmd.CommandText = sqlList[i];
                            cmd.Parameters.AddRange(paramList[i]);
                            cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();//添加这一句即可解决此问题
                        }
                        transaction.Commit();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        //logs.Log.WriteLine("错误原因:" + ex.Message);
                        try
                        {
                            //logs.Log.WriteLine("事物回滚");
                            transaction.Rollback();//出现错误就回滚...
                        }
                        catch (Exception ex1)
                        {
                            throw ex1;
                        }
                        throw ex;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}