参数中的动态 where 子句
本文关键字:where 子句 动态 参数 | 更新日期: 2023-09-27 18:33:23
我目前正在尝试建立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
并假设
- 您有
List<WhereField>
字段要包含在 WHERE 子句中 - 并且所有子句都放在一起
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();
<</div>
div class="answers"> 也许你需要
myCommand.CommandText = "SELECT * " +
"FROM TABLE1 WHERE " +
"@whereClause";