SQLHelper

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Threading.Tasks;

public static class SqlHelper
{
    // 读取连接字符串
    private static readonly string connectionString = ConfigurationManager.ConnectionStrings["HBSJYTKYDBConnStr"].ConnectionString;

    /// <summary>
    /// 同步方法,执行查询并返回DataTable
    /// </summary>
    /// <param name="query">SQL查询字符串</param>
    /// <param name="parameters">SQL参数数组</param>
    /// <returns>查询结果的DataTable</returns>
    public static DataTable ExecuteQuery(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                {
                    DataTable dataTable = new DataTable();
                    adapter.Fill(dataTable);
                    return dataTable;
                }
            }
        }
    }

    /// <summary>
    /// 同步方法,执行非查询(插入、更新、删除)
    /// </summary>
    /// <param name="query">SQL查询字符串</param>
    /// <param name="parameters">SQL参数数组</param>
    /// <returns>受影响的行数</returns>
    public static int ExecuteNonQuery(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                connection.Open();
                int affectedRows = command.ExecuteNonQuery();
                return affectedRows;
            }
        }
    }

    /// <summary>
    /// 同步方法,执行标量查询
    /// </summary>
    /// <param name="query">SQL查询字符串</param>
    /// <param name="parameters">SQL参数数组</param>
    /// <returns>查询结果的第一行第一列的值</returns>
    public static object ExecuteScalar(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                connection.Open();
                object result = command.ExecuteScalar();
                return result;
            }
        }
    }

    /// <summary>
    /// 异步方法,执行查询并返回DataTable
    /// </summary>
    /// <param name="query">SQL查询字符串</param>
    /// <param name="parameters">SQL参数数组</param>
    /// <returns>查询结果的DataTable</returns>
    public static async Task<DataTable> ExecuteQueryAsync(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                using (SqlDataAdapter adapter = new SqlDataAdapter(command))
                {
                    DataTable dataTable = new DataTable();
                    await Task.Run(() => adapter.Fill(dataTable));
                    return dataTable;
                }
            }
        }
    }

    /// <summary>
    /// 异步方法,执行非查询(插入、更新、删除)
    /// </summary>
    /// <param name="query">SQL查询字符串</param>
    /// <param name="parameters">SQL参数数组</param>
    /// <returns>受影响的行数</returns>
    public static async Task<int> ExecuteNonQueryAsync(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                await connection.OpenAsync();
                int affectedRows = await command.ExecuteNonQueryAsync();
                return affectedRows;
            }
        }
    }

    /// <summary>
    /// 异步方法,执行标量查询
    /// </summary>
    /// <param name="query">SQL查询字符串</param>
    /// <param name="parameters">SQL参数数组</param>
    /// <returns>查询结果的第一行第一列的值</returns>
    public static async Task<object> ExecuteScalarAsync(string query, SqlParameter[] parameters = null)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }

                await connection.OpenAsync();
                object result = await command.ExecuteScalarAsync();
                return result;
            }
        }
    }

    /// <summary>
    /// 异步方法,在事务中执行查询
    /// </summary>
    /// <param name="operations">执行事务的操作</param>
    /// <returns>Task</returns>
    public static async Task ExecuteTransactionAsync(Func<SqlTransaction, Task> operations)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            await connection.OpenAsync();
            using (SqlTransaction transaction = connection.BeginTransaction())
            {
                try
                {
                    await operations(transaction);
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
    }
}