diff --git a/Apewer/Source/SourceUtility.cs b/Apewer/Source/SourceUtility.cs index d9fdc7e..176b1d5 100644 --- a/Apewer/Source/SourceUtility.cs +++ b/Apewer/Source/SourceUtility.cs @@ -398,15 +398,16 @@ namespace Apewer.Source /// 简单查询:取结果中第 0 列所有单元格的文本形式,可指定查询后关闭服务器连接,返回结果中不包含无效文本。 /// 数据库客户端。 /// 用于查询的 SQL 语句。 + /// SQL 参数。 /// - public static string[] Column(this IDbAdo source, string sql) + public static string[] Column(this IDbAdo source, string sql, object parameters = null) { if (source == null) return new string[0]; var pool = null as string[]; var rows = 0; var count = 0; - using (var query = source.Query(sql)) + using (var query = source.Query(sql, parameters)) { if (!query.Success) throw new SqlException(query, sql); @@ -435,14 +436,15 @@ namespace Apewer.Source /// 简单查询:取结果中第 0 行、第 0 列单元格中的文本,可指定查询后关闭服务器连接。 /// 数据库客户端。 /// 用于查询的 SQL 语句。 + /// SQL 参数。 /// /// - public static string Cell(this IDbAdo dbClient, string sql) + public static string Cell(this IDbAdo dbClient, string sql, object parameters = null) { if (dbClient == null) throw new ArgumentNullException(nameof(dbClient)); if (sql.IsEmpty()) throw new ArgumentNullException(nameof(sql)); - using (var query = dbClient.Query(sql)) + using (var query = dbClient.Query(sql, parameters)) { if (!query.Success) throw new SqlException(query, sql); var value = TextUtility.Trim(query.Text(0, 0)); @@ -479,7 +481,7 @@ namespace Apewer.Source var ps = Parameters(dbClient, sql, kvps); return dbClient.Query(sql, ps); } - + else { var ps = ParametersByProperites(dbClient, sql, parameters); return dbClient.Query(sql, ps); @@ -522,6 +524,38 @@ namespace Apewer.Source } } + + /// 查询。 + /// 数据库连接。 + /// SQL 语句。 + /// 参数容器,每个属性表示一个 SQL 参数。此方法将会自动补足参数名称的 @ 前缀。 + /// + /// + public static T[] Query(this IDbOrm dbClient, string sql, object parameters = null) where T : class, new() + { + if (dbClient == null) throw new ArgumentNullException(nameof(dbClient)); + if (sql.IsEmpty()) throw new ArgumentNullException(nameof(sql)); + + if (dbClient is IDbAdo ado) + { + if (parameters is IEnumerable> kvps) + { + var ps = Parameters(ado, sql, kvps); + return dbClient.Query(sql, ps); + } + else + { + var ps = ParametersByProperites(ado, sql, parameters); + return dbClient.Query(sql, ps); + } + } + else + { + throw new NotImplementedException($"连接未实现 {nameof(IDbAdo)} 接口,无法创建参数。"); + } + } + + #endregion #region Execute