1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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");
        /// <summary>
        /// 获取数据库连接
        /// </summary>
        public static IDbConnection GetConnection()
        {
            var conn = new SqlConnection(_connectionString);
            if (conn.State != ConnectionState.Open)
                conn.Open();
            return conn;
        }
 
        /// <summary>
        /// 执行查询返回DataTable
        /// </summary>
        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;
            }
        }
 
        /// <summary>
        /// 执行增删改
        /// </summary>
        public static int Execute(string sql, object param = null)
        {
            using (var conn = GetConnection())
            {
                return conn.Execute(sql, param);
            }
        }
 
        /// <summary>
        /// 异步执行增删改
        /// </summary>
        public static async Task<int> ExecuteAsync(string sql, object param = null)
        {
            using (var conn = GetConnection())
            {
                return await conn.ExecuteAsync(sql, param);
            }
        }
 
        /// <summary>
        /// 执行事务
        /// </summary>
        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;
                    }
                }
            }
        }
 
        /// <summary>
        /// 查询列表
        /// </summary>
        public static List<T> Query<T>(string sql, object param = null)
        {
            using (var conn = GetConnection())
            {
                return conn.Query<T>(sql, param).ToList();
            }
        }
 
        /// <summary>
        /// 异步查询列表
        /// </summary>
        public static async Task<List<T>> QueryAsync<T>(string sql, object param = null)
        {
            using (var conn = GetConnection())
            {
                var result = await conn.QueryAsync<T>(sql, param);
                return result.ToList();
            }
        }
 
        /// <summary>
        /// 查询单个对象
        /// </summary>
        public static T QueryFirstOrDefault<T>(string sql, object param = null)
        {
            using (var conn = GetConnection())
            {
                return conn.QueryFirstOrDefault<T>(sql, param);
            }
        }
 
        /// <summary>
        /// 异步查询单个对象
        /// </summary>
        public static async Task<T> QueryFirstOrDefaultAsync<T>(string sql, object param = null)
        {
            using (var conn = GetConnection())
            {
                return await conn.QueryFirstOrDefaultAsync<T>(sql, param);
            }
        }
    }
}