H3.Query
序号 | 接口名称 | 说明 |
1 | QueryTable | SQL查询 |
2 | Count | 统计数量 |
上述清单中的接口均归属在this.Engine.Query下,具体用法分别详见于接口说明的示例部分。
SQL查询。为了防止用户滥用或执行低效SQL,从而对系统性能造成过大影响,接口有执行超时机制,耗时超过 30秒 ,则SQL语句执行失败,并抛出异常,异常消息示例:
Timeout in IO operation 或者 Connection must be valid and open to rollback transaction
一旦出现此类情况,请优化SQL,提升效率,或者将执行逻辑拆分,分批多次执行。
另外,请谨慎使用该接口执行 增删改 三类SQL语句,有 增删改 的需求请尽量通过操作业务对象实现。执行 增删改 三类SQL语句会绕开业务控制,直接操作数据表,可能会造成无法挽回的结果。
参数名 | 说明 |
commandText | 要执行的SQL语句 |
parameters | 参数列表 |
类型 | 说明 |
System.Data.DataTable | 查询结果集 |
如需无参查询,可使用如下代码形式:
// 无参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;
}
}统计数量。
参数名 | 说明 |
tableName | 要执行的SQL语句 |
conditions | 查询条件 |
parameters | 参数列表 |
类型 | 说明 |
int | 数量 |
如需无参查询,可使用如下代码形式:
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);