using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.Tools;
namespace VueWebCoreApi.Quartz
{
public static class DapperHelper
{
// 配置文件读取,建议放到appsettings.json
private static readonly string _connectionString = AppSetting.GetAppSetting("DBServer");
///
/// 获取数据库连接
///
public static IDbConnection GetConnection()
{
var conn = new SqlConnection(_connectionString);
if (conn.State != ConnectionState.Open)
conn.Open();
return conn;
}
///
/// 执行查询返回DataTable
///
public static DataTable SelectTable(string sql, object param = null)
{
using (var conn = GetConnection())
{
var reader = conn.ExecuteReader(sql, param);
var dt = new DataTable();
dt.Load(reader);
return dt;
}
}
///
/// 执行增删改
///
public static int Execute(string sql, object param = null)
{
using (var conn = GetConnection())
{
return conn.Execute(sql, param);
}
}
///
/// 异步执行增删改
///
public static async Task ExecuteAsync(string sql, object param = null)
{
using (var conn = GetConnection())
{
return await conn.ExecuteAsync(sql, param);
}
}
///
/// 执行事务
///
public static bool DoTransaction(List<(string Sql, object Param)> list)
{
using (var conn = GetConnection())
{
using (var tran = conn.BeginTransaction())
{
try
{
foreach (var item in list)
{
conn.Execute(item.Sql, item.Param, tran);
}
tran.Commit();
return true;
}
catch
{
tran.Rollback();
return false;
}
}
}
}
///
/// 查询列表
///
public static List Query(string sql, object param = null)
{
using (var conn = GetConnection())
{
return conn.Query(sql, param).ToList();
}
}
///
/// 异步查询列表
///
public static async Task> QueryAsync(string sql, object param = null)
{
using (var conn = GetConnection())
{
var result = await conn.QueryAsync(sql, param);
return result.ToList();
}
}
///
/// 查询单个对象
///
public static T QueryFirstOrDefault(string sql, object param = null)
{
using (var conn = GetConnection())
{
return conn.QueryFirstOrDefault(sql, param);
}
}
///
/// 异步查询单个对象
///
public static async Task QueryFirstOrDefaultAsync(string sql, object param = null)
{
using (var conn = GetConnection())
{
return await conn.QueryFirstOrDefaultAsync(sql, param);
}
}
}
}