.net7开发学习:封装一个简单的DAL工具类
之前在工作项目中使用过封装好的sql工具类,感觉很好用,所以根据自己的理解也做了一个mysql的工具类,支持开启事务。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace com.webdemo01.DAL.Core
{
public class SqlConnection
{
public readonly DbConnection connection;
private DbTransaction transaction;
private SqlConnection transConn;
public SqlConnection(
string connectionString = "server=;port=;uid=;pwd=;database=",
string providerName = "MySql.Data.MySqlClient")
{
DbProviderFactory factory = null;
if (providerName == "MySql.Data.MySqlClient")
{
factory = MySqlClientFactory.Instance;
}
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
connection.Open();
}
~SqlConnection()
{
connection.Close();
}
public SqlConnection BeginTransaction(SqlConnection conn)
{
transConn = conn;
transaction = transConn.connection.BeginTransaction();
return transConn;
}
public void Commit()
{
transaction.Commit();
}
public void Rollback()
{
transaction.Rollback();
}
public int Execute(string query, params DbParameter[] parameters)
{
using (DbCommand command = transConn.connection.CreateCommand())
{
command.Transaction = transaction;
command.CommandText = query;
command.Parameters.AddRange(parameters);
return command.ExecuteNonQuery();
}
}
public List<dynamic> Query(string query, params DbParameter[] parameters)
{
using (DbCommand command = connection.CreateCommand())
{
command.CommandText = query;
command.Parameters.AddRange(parameters);
using (DbDataReader reader = command.ExecuteReader())
{
List<dynamic> results = new List<dynamic>();
while (reader.Read())
{
dynamic result = new System.Dynamic.ExpandoObject();
for (int i = 0; i < reader.FieldCount; i++)
{
string columnName = reader.GetName(i);
object columnValue = reader.GetValue(i);
((IDictionary<string, object>)result).Add(columnName, columnValue);
}
results.Add(result);
}
return results;
}
}
}
}
}