zoukankan      html  css  js  c++  java
  • C# MySql Transaction Async

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.Configuration;
    using MySql.Data.MySqlClient;
    using System.Data.Common;
    using ConsoleApplication22.Model;
    using System.Reflection;
    
    namespace ConsoleApplication22
    {
        class Program
        {
            static void Main(string[] args)
            {
                ReadAsyncDemo();
                Console.ReadLine();
            }
           
            static async void ReadAsyncDemo()
            {
                string selectSQL = "select * from country";
                IList<Country> countryList = await MySqlRead2Async<Country>(selectSQL);
            }
    
            static string MySqlConnectionString = ConfigurationManager.ConnectionStrings["MySqlConnectionString"].ConnectionString;
            static async void MySqlReadAsync(string readSQL,Dictionary<string,object> parametersDic=null)
            {
                using (MySqlConnection conn = GetMySqlConnection())
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
                
                    using (MySqlCommand cmd = new MySqlCommand(readSQL, conn))
                    {
                        using (DbDataReader dataReader = await cmd.ExecuteReaderAsync())
                        {
                            StringBuilder selectBuilder = new StringBuilder();
                            while (await dataReader.ReadAsync())
                            {                            
                                for(int i=0;i<dataReader.FieldCount;i++)
                                {
                                    selectBuilder.Append(dataReader[i]+"	");
                                }
                                selectBuilder.AppendLine();                                                       
                            }
                            Console.WriteLine(selectBuilder.ToString());
                        }
                    }
                } 
            }
    
            static async Task<IList<T>> MySqlRead2Async<T>(string selectSQL,Dictionary<string,object> parametersDic=null)where T:class
            {
                IList<T> dataList = new List<T>();
                using (MySqlConnection conn = GetMySqlConnection())
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
                    using(MySqlCommand selectCmd=new MySqlCommand(selectSQL, conn))
                    {
                        using (DbDataReader dataReaderAsync = await selectCmd.ExecuteReaderAsync())
                        {
                            if (dataReaderAsync.HasRows)
                            {
                                DataTable dt = new DataTable();
                                dt.Load(dataReaderAsync);
                                dataList = dt.ToDataList<T>();
                            }
                        }
                    }
                }
                return dataList;               
            }
    
            static async Task<int> MySqlWriteAsync(string writeSQL,Dictionary<string,object> parametersDic=null)
            {
                int executeResult = -1;
                using (MySqlConnection conn = GetMySqlConnection())
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
    
                    using (MySqlCommand cmd = new MySqlCommand(writeSQL, conn))
                    {
                        using (MySqlTransaction myTrans = await conn.BeginTransactionAsync())
                        {
                            try
                            {
                                if (parametersDic != null && parametersDic.Any())
                                {
                                    foreach (var pDic in parametersDic)
                                    {
                                        cmd.Parameters.AddWithValue(pDic.Key, pDic.Value);
                                    }
                                }
    
                                cmd.Transaction = myTrans;
                                executeResult = await cmd.ExecuteNonQueryAsync();
                                myTrans.Commit();
                            }
                            catch (Exception ex)
                            {
                                myTrans.Rollback();
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                }
                return executeResult;            
            }
    
            static MySqlConnection GetMySqlConnection()
            {
                MySqlConnection conn = new MySqlConnection();
                conn.ConnectionString = MySqlConnectionString;
                return conn;
            }
        }
    
        static class ExtendClass
        {
            public static List<T> ToDataList<T>(this DataTable dt)
            {
                var list = new List<T>();
                var plist = new List<PropertyInfo>(typeof(T).GetProperties());
                foreach (DataRow item in dt.Rows)
                {
                    T s = Activator.CreateInstance<T>();
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName);
                        if (info != null)
                        {
                            try
                            {
                                if (!Convert.IsDBNull(item[i]))
                                {
                                    object v = null;
                                    if (info.PropertyType.ToString().Contains("System.Nullable"))
                                    {
                                        v = Convert.ChangeType(item[i], Nullable.GetUnderlyingType(info.PropertyType));
                                    }
                                    else
                                    {
                                        v = Convert.ChangeType(item[i], info.PropertyType);
                                    }
                                    info.SetValue(s, v, null);
                                }
                            }
                            catch (Exception ex)
                            {
                                throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message);
                            }
                        }
                    }
                    list.Add(s);
                }
                return list;
            }
        }
    }
     static async Task<int> MySqlWriteAsync(string writeSQL,Dictionary<string,object> parametersDic=null)
            {
                int executeResult = -1;
                using (MySqlConnection conn = GetMySqlConnection())
                {
                    if (conn.State != ConnectionState.Open)
                    {
                        conn.Open();
                    }
    
                    using (MySqlCommand cmd = new MySqlCommand(writeSQL, conn))
                    {
                        using (MySqlTransaction myTrans = await conn.BeginTransactionAsync())
                        {
                            try
                            {
                                if (parametersDic != null && parametersDic.Any())
                                {
                                    foreach (var pDic in parametersDic)
                                    {
                                        cmd.Parameters.AddWithValue(pDic.Key, pDic.Value);
                                    }
                                }
    
                                cmd.Transaction = myTrans;
                                executeResult = await cmd.ExecuteNonQueryAsync();
                                myTrans.Commit();
                            }
                            catch (Exception ex)
                            {
                                myTrans.Rollback();
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                }
                return executeResult;            
            }
  • 相关阅读:
    HTML 样式设计
    Spring Spring mvc MyBatis 中使用数据库查询别名进行映射
    常见数据库优化方案(六)
    别人面试案例(一)
    常用数据库优化方案(四)
    AS 实机测试 ADB.exe 提示
    指尖上的正则表达式–入门篇
    程序员对内存的理解
    字符串匹配的KMP算法
    字符串匹配的Boyer-Moore算法
  • 原文地址:https://www.cnblogs.com/Fred1987/p/12018360.html
Copyright © 2011-2022 走看看