跳转至

数据库查询

存在部分复杂查询无法通过 H3.Data.Filter.Filter 实现,此时可使用 this.Engine.Query.QueryTable 方法直接执行 SQL 查询。

⚠️ 注意
this.Engine.Query.QueryTable 可执行 insertupdatedelete 语句,但该功能可能随时收回,不推荐使用。直接操作数据库无法触发 业务规则自动化汇总计算 等系统功能,可能导致数据不一致。建议使用接口方式执行数据新增、修改或删除操作,具体参考业务数据操作示例

接口定义

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 变量混淆。