using System.Text;
using MySql.Data.MySqlClient;
using System.Data;
using Dapper;
using System.Reflection; namespace DbHelper
{
public class MySqlHelper
{
private string connectionStr = "server=localhost;database=fxy;User=root;password=cxk";
//public object connection = GetConnection(connectionStr); /// <summary>
/// Dapper查询(包含存储过程及sql语句查询)
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <param name="sql">存储过程名称或者sql语句</param>
/// <param name="param">参数化处理</param>
/// <param name="isStoredProcedure">是否存储过程查询</param>
/// <returns></returns>
public List<T> DapperQuery<T>(string sql , object param , bool? isStoredProcedure = false) where T : new()
{
using(IDbConnection con = new MySqlConnection(connectionStr))
{
CommandType cmdType = (isStoredProcedure ?? true) ? CommandType.StoredProcedure : CommandType.Text;
try
{
List<T> queryList = con.Query<T>(sql , param , null, true , null , cmdType).ToList();
return queryList;
}
catch(Exception e)
{
throw;
}
}
} /// <summary>
/// TSQL查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="isStoredProcedure"></param>
/// <returns></returns>
public List<T> TSqlQuery<T>(string sql,MySqlParameter[] param,bool? isStoredProcedure = false) where T:new()
{
using(MySqlConnection con = new MySqlConnection(connectionStr))
{
con.Open();
CommandType cmdType = (isStoredProcedure ?? true) ? CommandType.StoredProcedure : CommandType.Text;
MySqlCommand command = new MySqlCommand(sql , con );
command.CommandType = cmdType;
if(param != null )
{
command.Parameters.AddRange(param);
}
try
{
MySqlDataReader reader = command.ExecuteReader();
List<T> list = DataReaderToList<T>(reader);
return list;
}
catch(Exception e)
{
throw;
}
finally
{
con.Close();
}
}
} /// <summary>
/// Dapper增删改(包含存储过程及sql语句查询)
/// </summary>
/// <param name="sql">存储过程名称或者sql语句</param>
/// <param name="param">参数化处理</param>
/// <param name="isStoredProcedure">是否存储过程查询</param>
/// <returns></returns>
public bool DapperExcute(string sql , object param , bool? isStoredProcedure=false,int?commandTimeout=null)
{
bool result = false;
using(IDbConnection con = new MySqlConnection(connectionStr))
{
con.Open();
IDbTransaction tran = con.BeginTransaction();
CommandType cmdType = isStoredProcedure==true ? CommandType.StoredProcedure : CommandType.Text;
try
{
int query = con.Execute(sql , param , tran , commandTimeout , cmdType);
tran.Commit();
result = true;
}
catch(Exception e)
{
tran.Rollback();
throw;
}
finally
{
con.Close();
}
return result;
} } /// <summary>
/// TSQL增删改操作
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="isStoredProcedure"></param>
/// <returns></returns>
public bool TSqlExcute(string sql , MySqlParameter[] param , bool? isStoredProcedure=false)
{
bool result = false;
using(MySqlConnection con = new MySqlConnection(connectionStr))
{
con.Open();
MySqlTransaction tran = con.BeginTransaction();
CommandType cmdType = isStoredProcedure==true ? CommandType.StoredProcedure : CommandType.Text;
MySqlCommand command = new MySqlCommand(sql , con , tran);
command.Parameters.AddRange(param);
try
{
int query = command.ExecuteNonQuery();
tran.Commit();
result = true;
}
catch(Exception e)
{
tran.Rollback();
throw;
}
finally
{
con.Close();
}
return result;
}
} /// <summary>
/// 批量数据写入
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="dataList"></param>
/// <returns></returns>
private bool BulkInsert<T>(string sql , List<T> dataList) where T:new()
{
bool result = false;
//获取T的公共属性
Type type = dataList[ ].GetType();
PropertyInfo[] param = type.GetProperties();
List<string> properotyList = param.Select(p => p.Name).ToList();
using(MySqlConnection con= new MySqlConnection(connectionStr))
{
con.Open();
StringBuilder sb = new StringBuilder();
sb.Append(sql);
sb.Append(" VALUES");
int i = ;
foreach(var item in dataList)
{
sb.Append("(");
for(int j = ; j < properotyList.Count ; j++)
{
PropertyInfo properotyInfo = item.GetType().GetProperty(properotyList[ j ]); // 属性的信息
object properotyValue = properotyInfo.GetValue(item , null);// 属性的值
string cellValue = properotyValue == null ? "" : properotyValue.ToString();// 单元格的值
sb.Append("\"");
sb.Append(properotyValue);
sb.Append("\"");
if(j < properotyList.Count - )
{
sb.Append(",");
}
}
sb.Append(")");
if(i++ < dataList.Count - )
{
sb.Append(",");
}
}
sql = sb.ToString(); MySqlTransaction tran = con.BeginTransaction();
MySqlCommand commd = new MySqlCommand(sql , con , tran);
try
{
int query = commd.ExecuteNonQuery();
result = true;
}
catch(Exception e)
{
tran.Rollback();
throw;
}
return result;
}
} /// <summary>
/// DataReader To List
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reader"></param>
/// <returns></returns>
private static List<T> DataReaderToList<T>(MySqlDataReader reader) where T : new()
{
List<T> list = new List<T>();
if(reader.HasRows)
{
while(reader.Read())
{
T t = new T();
Type type = t.GetType();
var properties = type.GetProperties();
foreach(var item in properties)
{
string name = item.Name;
reader.GetSchemaTable().DefaultView.RowFilter = "ColumnName= '" + name + "'";
bool check = reader.GetSchemaTable().DefaultView.Count > ;
if(check)
{
if(!item.CanWrite)
{
continue;
}
var value = reader[ name ];
if(value != DBNull.Value)
{
item.SetValue(t , value , null);
}
}
}
list.Add(t);
}
}
return list;
}
}
}

C#操作MySql数据库帮助类(Dapper,T-Sql)的更多相关文章

  1. 一、初识MySQL数据库 二、搭建MySQL数据库(重点) 三、使用MySQL数据库 四、认识MySQL数据库的数据类型 五、操作MySQL数据库的数据(重点)

    一.初识MySQL数据库 ###<1>数据库概述     1. 数据库         长期存储在计算机内的,由组织的可共享的数据集合         存储数据的仓库         文件 ...

  2. .NET Core Dapper操作mysql数据库

    前言 现在ORM盛行,市面上已经出现了N款不同的ORM套餐了.今天,我们不谈EF,也不聊神马黑马,就说说 Dapper.如何在.NET Core中使用Dapper操作Mysql数据库呢,让我们跟随镜头 ...

  3. Dapper操作MySQL数据库获取JSON数据中文乱码

    前言 在项目中利用Dapper将JSON数据存储到MySQL数据库,结果发现JSON数据中的中文乱码,特此记录,希望对存储JSON的童鞋能有所帮助,文中若有错误之处,还望批评指正. Dapper获取J ...

  4. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  5. Code First操作Mysql数据库

    前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...

  6. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  7. Java 操作MySql数据库

    Java 项目开发中数据库操作是很重要的一个方面,对于初学者来说,MySql是比较容易熟悉的一种常见数据库,这篇文章记录了如何用Java来操作MySql数据库. 第一章 JDBC的概念 JDBC(Ja ...

  8. mysqli扩展库操作mysql数据库

    配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...

  9. python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

    内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...

随机推荐

  1. 小练习:vaild number

    1.描述 给定字符串,若该字符串表示的是数字,则输出true,否则输出false 2.分析 题目一看感觉不难,做起来却很麻烦,首先是数字的各种表示要知道,然后就是对这些不同形式的数字进行筛选判断.该题 ...

  2. 【hdu1005】Number Sequence

    题目描述 一个数列的定义如下: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A和B,你要求出f(n). 输入 输 ...

  3. 使用Eclipse EE(汉化版) 创建一个JavaWeb工程

    第一步:打开eclipse ee,单击“文件”-->单击“新建”-->单击“动态Web项目”. 若没找到“动态Web项目”,单击“其他” -->在弹出的窗口中打开“Web”下拉菜单 ...

  4. 一张图带你了解OKhttp框架

  5. 一台服务器的IIS绑定多个域名

    等待十分钟: 在IIS上配置:

  6. 在.NET Core中连接使用Zookeeper

    一开始找到的是ZookeeperNetEx,但是很多API都很原始,不怎么好用. 最后确定用Rabbit.Zookeeper来做,他对ZookeeperNetEx进行了封装,要简单不少. 和c语言和j ...

  7. WIP - Study Perf (by quqi99)

    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99) Perf Flame Graph sudo perf ...

  8. Ubuntu循环登录libGL error: fbConfigs swrast等

    Ubuntu16.04更新NVIDIA驱动后,无法进入桌面,使用vim .xsession-errors 查看错误信息,如下: libGL error: No matching fbConfigs o ...

  9. python爬虫入门(6)-Scrapy基本使用

    源码:链接:http://pan.baidu.com/s/1dEK82hb 密码:9flo   创建项目                                 scrapy startpro ...

  10. learn go defer

    package main // 参考文档: // https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/06.4.md im ...