数据库查询
存在部分复杂查询无法通过 H3.Data.Filter.Filter 实现,此时可使用 this.Engine.Query.QueryTable 方法直接执行 SQL 查询。
⚠️ 注意
this.Engine.Query.QueryTable可执行insert、update、delete语句,但该功能可能随时收回,不推荐使用。直接操作数据库无法触发业务规则、自动化、汇总计算等系统功能,可能导致数据不一致。建议使用接口方式执行数据新增、修改或删除操作,具体参考业务数据操作示例。
接口定义
public System.Data.DataTable QueryTable(string commandText,
H3.Data.Database.Parameter[] parameters)
请求参数
| 参数名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
commandText |
是 | string |
SQL 语句 |
parameters |
否 | H3.Data.Database.Parameter[] |
防 SQL 注入的参数 |
返回值
| 类型 | 描述 |
|---|---|
System.Data.DataTable |
查询结果 |
示例
使用参数化查询防止 SQL 注入:
// 第一种方式使用?参数前缀
string schemaCode = "D000183Skl74jv67t08nxlsbdew4xu273";
H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(schemaCode);
string tableName = schema.TableName;
string p1Name = "F0000003";
string dbParamFlag = "?";
H3.Data.Database.Parameter p1 = new H3.Data.Database.Parameter(p1Name, System.Data.DbType.String, "定时提醒");
string sql = string.Format("SELECT * FROM {0} WHERE F0000003 = {1}{2} LIMIT 10", tableName, dbParamFlag, p1Name);
System.Data.DataTable table = this.Engine.Query.QueryTable(sql, new H3.Data.Database.Parameter[] { p1 });
if(table != null && table.Rows.Count > 0)
{
// 处理查询结果
}
// 第二种方式使用@变量
string schemaCode = "D000183Skl74jv67t08nxlsbdew4xu273";
H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(schemaCode);
if (schema == null) return;
string tableName = schema.TableName;
string paramName = "@param_F0000003";
H3.Data.Database.Parameter param = new H3.Data.Database.Parameter(
paramName,
System.Data.DbType.String,
"定时提醒"
);
string sql = string.Format(
"SELECT * FROM {0} WHERE F0000003 = {1} LIMIT 10",
tableName,
paramName
);
System.Data.DataTable table = this.Engine.Query.QueryTable(
sql,
new H3.Data.Database.Parameter[] { param }
);
if (table != null && table.Rows.Count > 0)
{
foreach (System.Data.DataRow row in table.Rows)
{
string fieldValue = row["F0000003"] + string.Empty;
}
}
💡 提示
参数名建议添加前缀(如@param_)避免与 SQL 变量混淆。