6、数据库查询
更新时间: 2023-12-01 浏览次数: {{ hits }}

类名

H3.Query

接口清单

序号

接口名称

说明

1

QueryTable

SQL查询

2

Count

统计数量

基本用法

上述清单中的接口均归属在this.Engine.Query下,具体用法分别详见于接口说明的示例部分。

接口说明

1. QueryTable(string commandText, Parameter[] parameters)

1.1. 说明

SQL查询。为了防止用户滥用或执行低效SQL,从而对系统性能造成过大影响,接口有执行超时机制,耗时超过 30秒 ,则SQL语句执行失败,并抛出异常,异常消息示例:

Timeout in IO operation 或者 Connection must be valid and open to rollback transaction

一旦出现此类情况,请优化SQL,提升效率,或者将执行逻辑拆分,分批多次执行。

另外,请谨慎使用该接口执行 增删改 三类SQL语句,有 增删改 的需求请尽量通过操作业务对象实现。执行 增删改 三类SQL语句会绕开业务控制,直接操作数据表,可能会造成无法挽回的结果。

1.2. 参数

参数名

说明

commandText

要执行的SQL语句

parameters

参数列表

1.3. 返回值

类型

说明

System.Data.DataTable

查询结果集

1.4. 示例

如需无参查询,可使用如下代码形式:

// 无参SQL语句
string sql = "SELECT ObjectId, Status FROM i_D00001ABC WHERE Status=1;";
System.Data.DataTable dtAccount = this.Engine.Query.QueryTable(sql, null);
if(dt != null && dt.Rows.Count > 0)
{
    //循环处理查询结果
    foreach(System.Data.DataRow row in dt.Rows) 
    {
        string boId = row["ObjectId"] + string.Empty;
        string boStatus = row["Status"] + string.Empty;
    }
}

如需有参查询,则可使用如下代码形式:

//本sql中@name即参数名,与H3.Data.Database.Parameter参数对象一一对应
string sql = "SELECT ObjectId FROM H_User WHERE Name = @name;";
//定义参数集合
List <H3.Data.Database.Parameter> parameters = new List<H3.Data.Database.Parameter>();
H3.Data.Database.Parameter param = new H3.Data.Database.Parameter(
    "@name", //参数名
    System.Data.DbType.String, //参数值类型
    "张三" //参数值    
);
parameters.Add(param);
System.Data.DataTable dt = this.Engine.Query.QueryTable(sql, parameters.ToArray());
if(dt != null && dt.Rows.Count > 0)
{
    //循环处理查询结果
    foreach(System.Data.DataRow row in dt.Rows) 
    {
        string id = row["ObjectId"] + string.Empty;
    }
}

2. Count(string tableName, string[] conditions, Parameter[] parameters)

2.1. 说明

统计数量。

2.2. 参数

参数名

说明

tableName

要执行的SQL语句

conditions

查询条件

parameters

参数列表

2.3. 返回值

类型

说明

int

数量

2.4. 示例

如需无参查询,可使用如下代码形式:

string[] conditions = { "Status = 1" };
int count = this.Engine.Query.Count("i_D00001ABC", conditions, null);

如需有参查询,则可使用如下代码形式:

string[] conditions = { "Name = @name" };
//定义参数集合
List <H3.Data.Database.Parameter> parameters = new List<H3.Data.Database.Parameter>();
H3.Data.Database.Parameter param = new H3.Data.Database.Parameter(
    "@name", //参数名
    System.Data.DbType.String, //参数值类型
    "张三" //参数值    
);
parameters.Add(param);
int count = this.Engine.Query.Count("H_User", conditions, parameters);