在需要条件的上下文中指定的非布尔类型的表达式,在 c# 中使用 DbCommand 进行参数化

本文关键字:DbCommand 参数 布尔 条件 上下文 类型 表达式 | 更新日期: 2023-09-27 17:55:51

我有这个函数来执行参数化的选择查询:

public string LookUp(string sColuna, string sTabela, string sWhere)
{
    string[] Parameters = { "@column", "@table", "@where" };
    var comando = @"SELECT @column FROM @table WHERE @where";
    var cmd = this.OraConnection.CreateCommand();
    cmd.CommandText = comando;
    cmd.Parameters.AddRange(Parameters.Select(item => { var param = cmd.CreateParameter(); param.ParameterName = item; param.Value = 1; return para; }).ToArray());
    cmd.Parameters[0].Value = sColuna;
    cmd.Parameters[1].Value = sTabela;
    cmd.Parameters[2].Value = sWhere;
    DbDataReader Reader = cmd.ExecuteReader();
    return Reader.GetString(0);
}

当它到达DbDataReader Reader = cmd.ExecuteReader();时,它会抛给我一个异常,说: 附加信息:在需要条件的上下文中指定的非布尔类型的表达式,靠近"@where"。where 子句中不能有参数吗?

现在我已将其更改为:

var cmd = this.OraConnection.CreateCommand();
            cmd.CommandText = string.Format("SELECT {} FROM {} WHERE", sColuna, sTabela, sWhere);
            DbDataReader Reader = cmd.ExecuteReader();
            return Reader.GetString(0);

在需要条件的上下文中指定的非布尔类型的表达式,在 c# 中使用 DbCommand 进行参数化

String sWhere是计算布尔表达式所需的参数

[查询的开始] 其中 [某物]=[您的参数]
[查询的开始]其中 [某物]=@where

对于@where值 = swhere

如果你想要一个关于构建 WHERE 子句的更复杂的答案,看看这个关于相同问题的答案