1. 程式人生 > >C#操作MySql數據庫幫助類(Dapper,T-Sql)

C#操作MySql數據庫幫助類(Dapper,T-Sql)

user lex object per ram int rowfilter close tex

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[ 0 ].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 = 0; foreach(var item in dataList) { sb.Append("("); for(int j = 0 ; 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 - 1) { sb.Append(","); } } sb.Append(")"); if(i++ < dataList.Count - 1) { 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 > 0; 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)