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=;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的更多相关文章
- MySQL transaction
MySQL transaction(数据库的事务) 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作. 要么完全执行,要么完全地不执行. ACID 事务 ...
- mysql transaction 事务
1.事务简介 一个"最小的"不可再分的"工作单元". 一个事务通常对应了一个完整的业务.如:银行的转账功能,a转账给b,a扣钱,b加钱. 一个事务包含一条或多条 ...
- NodeJs使用Mysql模块实现事务处理
依赖模块: 1. mysql:https://github.com/felixge/node-mysql npm install mysql --save 2. async:https://githu ...
- MySQL监控模板说明-Percona MySQL Monitoring Template for Cacti
http://blog.chinaunix.net/uid-16844903-id-3535535.html https://www.percona.com/doc/percona-monitorin ...
- Percona监控MySQL模板详解
InnoDB Adaptive Hash Index 显示了"自适应哈希索引"的使用情况,哈希索引只能用来搜索等值的查询. # Hash table size 17700827, ...
- node封装mysql操作
前言 node是基于异步的,因此在进行数据库查询操作的通常是通过回调来操作查询结果.但是在有了es7的async/await,基本不再需要回调了,所以本篇是基于async/await对mysql进行一 ...
- 数据库选型之MySQL(多线程并发)
刘勇 Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库 ...
- node.js 调用mysql 数据库
1.在package.json中添加mysql依赖 命令:npm install mysql --save 2.项目中添加mysql文件夹 > 文件夹下创建config文件夹,并在config下 ...
- python操作MySQL数据库的三个模块
python使用MySQL主要有两个模块,pymysql(MySQLdb)和SQLAchemy. pymysql(MySQLdb)为原生模块,直接执行sql语句,其中pymysql模块支持python ...
随机推荐
- 程序员的算法课(20)-常用的图算法:最小生成树(MST)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- 有趣的动态规划(golang版本)
多年前就听过这个动态规划,最近在复习常用算法的时候才认真学习了一下,发现蛮有意思,和大家安利一波. 定义: 准确来说,动态规划师吧一个复杂问题分解成若干个子问题,并且寻找最优子问题的一种思想,而不是一 ...
- 一个null,差点把系统给弄崩溃了
今天生产上面发现了一个奇异的bug,URL上面会带上一个ID,这个ID是关联别的系统的,类似这种格式 xxx.xxx.xxx.xxx ,是别的系统自己填写的,我们的URL会带上id=xxx.xxx. ...
- Linux:AWK基础
AWK是一个强大的文本分析工具,算是Linux系统特别有用的命令了,在日志分析.文件内容分析中扮演特别重要的角色. AWK说明 简单来说awk就是把文件逐行的读入,以指定的分隔符将每行分割,分割后的部 ...
- 如何看一款app里面所包含的图片
在开发制作App的过程中,有时候会想看看一些精美的App里面所设计的素材.这个时候就需要用到我给大家展现的方法了.下面就看看该如何操作能让一个App呈现出它原始的一面,这次我以Any.Do为例给大家演 ...
- Python一秒搭建ftp服务器,帮助你在局域网共享文件
"老板 来碗面" "要啥面?" "内牛满面.." 最近项目上的事情弄得人心累,本来是帮着兄弟项目写套入口代码,搞着搞着就被拉着入坑了.搞开发 ...
- HIT2019视听觉信号处理视觉实验一
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...
- Apache Maven从入门到升天
喜欢就点个赞呗! GitHub项目JavaHouse同步收录 1 引入 在日常 Java 开发中,Maven 应该是必不可少的一个工具了,当然也有人使用 Gradle 的.那么 Maven 究竟是个啥 ...
- [TimLinux] Python 类型与运算
1. 内建(built-in)数据类型种类 数字类型:int(), float() 顺序(sequence): 字符串:str() 元祖:tuple() 列表:list() 字典:dict() 集合: ...
- Python文章相关性分析---金庸武侠小说分析-2018.1.16
最近常听同事提及相关性分析,正巧看到这个google的开源库,并把相关操作与调试结果记录下来. 输出结果: 比较有意思的巧合是黄蓉使出打狗棒,郭靖就用了降龙十八掌,再后测试了名词的解析. 小说集可以百 ...