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);