public static class DapperHelper
{
public static SqlParameter[] CreateParameters(object pars)
{
if (pars == null)
{
return new SqlParameter[0]; // 返回空数组,而不是null
}
var properties = pars.GetType().GetProperties();
var parameters = new List<SqlParameter>();
foreach (var prop in properties)
{
var parameter = new SqlParameter($"@{prop.Name}", prop.GetValue(pars));
parameters.Add(parameter);
}
return parameters.ToArray();
}
public static async Task<int> ExecuteAsync(string sql, object parameters = null)
{
// 如果提供了参数对象,则从对象创建 SqlParameter 数组
var par = parameters == null ? null : CreateParameters(parameters);
return await DBHelper.UpdateAsync(sql, par);
}
public static async Task<int> ExecuteScalarAsync(string sql, object parameters = null)
{
var par = parameters == null ? null : CreateParameters(parameters);
var data = await DBHelper.SelectScalarAsync(sql, par);
return (int)data;
}
public static async Task<List<T>> QueryAsync<T>(string sql, object pars = null)
{
var result = new List<T>();
var par = pars == null ? null : CreateParameters(pars);
using (var reader = await DBHelper.SelectReaderAsync(sql, par))
{
// 如果 reader 为 null,直接返回空结果集
if (reader == null)
{
return result; // 返回空的 List<T>
}
// 获取所有属性及其对应的 [Column] 属性值
var properties = typeof(T).GetProperties()
.Select(p => new
{
Property = p,
ColumnName = p.GetCustomAttribute<ColumnAttribute>()?.Name ?? p.Name
})
.ToList();
// 如果 properties 为空,直接返回空结果集
if (!properties.Any())
{
return result; // 返回空的 List<T>
}
while (reader.Read())
{
var entity = Activator.CreateInstance<T>();
for (int i = 0; i < reader.FieldCount; i++)
{
var propName = reader.GetName(i); // 数据库字段名称
var prop = properties.FirstOrDefault(p => string.Equals(p.ColumnName, propName, StringComparison.OrdinalIgnoreCase));
if (prop != null)
{
// 检查是否为 DBNull.Value
if (reader[i] == DBNull.Value)
{
// 如果目标属性是可空类型