参数中的动态where子句

我目前正在尝试构建SqlCommand的where子句。

类似的东西

 myCommand.CommandText = "SELECT * " + "FROM TABLE1 " + "@whereClause"; //I build up the where clause with a StringBuilder myCommand.Parameters.AddWithValue("@whereClause" theClause.ToString()); 

但似乎这不可能。 我得到了例外:

SqlException’@whereClause’附近的语法不正确

我想做这样的事情的原因是因为我想避免X调用数据库,这样我就把排序和过滤留给了服务器。

反正有没有做类似的事情?

/ edit:where子句看起来像这样的WHERE (TABLE1.COL1 = 'the value' OR TABLE1.COL1 = 'another value' OR TABLE1.COL1 = 'this value' ... )

/编辑Finaly这是由于一个愚蠢的错字错误…我改为不使用参数化查询。 我会赞成那些帮助我的人的答案。 即使它没有修复我的(愚蠢的)错误,我也会标记为更接近修复我的情况的答案

您似乎正在尝试将整个WHERE子句添加为参数 – 这将无法正常工作!

所以假设你需要构建这样的东西

 SELECT * from TABLE1 WHERE Field1=@Field1Value and Field2=@Field2Value 

并假设

  • 你有一个要包含在WHERE子句中的List字段
  • 并且所有条款都是AND
  • WhereField看起来像这样

 public class WhereField { public string FieldName{get;set;} public object FieldValue{get;set;} public string ComparisonOperator{get;set;} } 

然后你有这样的事情:

 var whereClause = new StringBuilder(); foreach (var field in WhereFields) { whereClause.Append(field.FieldName) .Append(field.ComparisonOperator) .Append("@") .Append(field.FieldName).Append("Value") .Append (" AND "); //add the parameter as well: myCommand.Parameters.AddWithValue("",field.FieldName+"Value"); } //cleanly close the where clause whereClause.Append("1=1"); 

现在你可以执行了

 myCommand.CommandText = "SELECT * " + "FROM TABLE1 WHERE " + whereClause.ToString(); 

您不能在子句(where)中使用参数,只允许在command.Parameters使用参数。

要构建动态Where子句,必须根据条件和字符串连接构建查询,然后相应地添加参数。

就像是:

 sb.Append("SELECT * FROM TABLE1 "); if (someCondition) { sb.Append("WHERE XColumn = @XColumn"); myCommand.Parameters.AddWithValue("@XColumn", "SomeValue"); } else { sb.Append("WHERE YColumn = @YColumn"); myCommand.Parameters.AddWithValue("@YColumn", "SomeOtherValue"); } myCommand.CommandText = sb.ToString(); 

可能是你需要的

 myCommand.CommandText = "SELECT * " + "FROM TABLE1 WHERE " + "@whereClause";