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=;i<dataReader.FieldCount;i++)
{
selectBuilder.Append(dataReader[i]+"\t");
}
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 = -;
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 = ; 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 = -;
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;
}

C# MySql Transaction Async的更多相关文章

  1. MySQL transaction

    MySQL transaction(数据库的事务) 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作. 要么完全执行,要么完全地不执行. ACID 事务 ...

  2. mysql transaction 事务

    1.事务简介 一个"最小的"不可再分的"工作单元". 一个事务通常对应了一个完整的业务.如:银行的转账功能,a转账给b,a扣钱,b加钱. 一个事务包含一条或多条 ...

  3. NodeJs使用Mysql模块实现事务处理

    依赖模块: 1. mysql:https://github.com/felixge/node-mysql npm install mysql --save 2. async:https://githu ...

  4. MySQL监控模板说明-Percona MySQL Monitoring Template for Cacti

    http://blog.chinaunix.net/uid-16844903-id-3535535.html https://www.percona.com/doc/percona-monitorin ...

  5. Percona监控MySQL模板详解

    InnoDB Adaptive Hash Index 显示了"自适应哈希索引"的使用情况,哈希索引只能用来搜索等值的查询. # Hash table size 17700827, ...

  6. node封装mysql操作

    前言 node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果.但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一 ...

  7. 数据库选型之MySQL(多线程并发)

    刘勇    Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库 ...

  8. node.js 调用mysql 数据库

    1.在package.json中添加mysql依赖 命令:npm install mysql --save 2.项目中添加mysql文件夹 > 文件夹下创建config文件夹,并在config下 ...

  9. python操作MySQL数据库的三个模块

    python使用MySQL主要有两个模块,pymysql(MySQLdb)和SQLAchemy. pymysql(MySQLdb)为原生模块,直接执行sql语句,其中pymysql模块支持python ...

随机推荐

  1. Spring中的事务回滚机制

    初学者笔记 问题:在Java项目汇中,添加@Transactional注解,报错之后,事务回滚未生效,数据仍插入数据库中.经查看报错位置位于新增成功之后.空指针异常. 一.特性 先了解一下@Trans ...

  2. 2019-9-28:渗透测试,phpstudy后门,利用复现

    9月20号爆出Phpstudy存在隐藏后门,简单复现下后门效果 该文章仅供学习,利用方法来自网络文章,仅供参考 目标机:win7系统,安装phpstudy 2018版,php版本5.2或php 5.4 ...

  3. Scrapy中的反反爬、logging设置、Request参数及POST请求

    常用的反反爬策略 通常防止爬虫被反主要有以下几策略: 动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息.) 禁用cookies(也就是不启用cookies midd ...

  4. 本地存储常用方式 localStorage, sessionStorage,cookie 的区别 和 服务器存储session

    本地存储:把一些信息存储到客户端本地(主要目的有很多,其中有一个就是实现多页面之间的信息共享)       1. 离线缓存(xxx.manifest)  H5处理离线缓存还是存在一些硬伤的,所以真实项 ...

  5. SQL基础语句(详解版)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/CZXY18ji/article/deta ...

  6. 【Android - 自定义View】之View的事件分发机制

    参考资料: View事件分发:http://blog.csdn.net/pi9nc/article/details/9281829 ViewGroup事件分发:http://blog.csdn.net ...

  7. Android Binder机制介绍

    做过Android开发的同学可能有些体会,入门初期,工作内容主要是实现各式各样的UI界面,以及实现应用的业务逻辑.在这个阶段,我们会逐渐熟悉View系统,逐渐学会实现各种各样的界面以及动画效果.再往后 ...

  8. SDWebImage学习之 NSCache

    1.使用SDWebImage的好处 1.异步下载(避免主线程卡死) 2.做好图片缓存(这样就不需要每次都加载网络图片) 3.解决了循环利用的问题 很容易造成内存警告

  9. luogu P1650 田忌赛马 |贪心

    题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负者这里取得200银币. ...

  10. MD5、公钥、私钥、加密、认证

    MD5 MD5的全称是Message-Digest Algorithm 5. MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法. 换句话说就是,即使你看到 ...