【问题标题】:Asp.Net How to pass multiple value to a parameter which is using with 'IN' clause in the queryAsp.Net 如何将多个值传递给在查询中使用“IN”子句的参数
【发布时间】:2014-10-28 13:00:49
【问题描述】:

我创建了一个网络表单,在网络表单中,有一个多选下拉列表。我从多选下拉列表中获取价值并将其传递给隐藏字段。然后我将隐藏字段的值作为参数添加到 SqlCommand。据了解,我有一个查询,参数在查询中使用 with 'IN' 子句。

当我只选择一个选项时,它工作顺利,我可以获得数据集。但是当它被选择多个时,它没有返回任何结果。

查询:

   select .... from tblReservation
   Where  type IN (@type)

代码:

   command.Parameters.Add(new SqlParameter("@type", HiddenField.Value));

When one option is selected HiddenField.Value="flight"

When multiple options is selected HiddenField.Value="flight,Hotel,rentacar"

【问题讨论】:

  • 不改变查询就没有。

标签: asp.net sql-server tsql


【解决方案1】:

SQL Server 将您的 IN 子句视为:

IN ('flight,Hotel,rentacar')

你想要的是

IN ('flight','Hotel','rentacar')

因此,您需要为每种类型设置一个参数。

您可以使用这种方法:

string[] types = HiddenField.Value.Split(','); // { "flight","Hotel","rentacar" };
string cmdText = "SELECT * FROM tblReservation WHERE type IN ({0})";

string[] paramNames = types.Select(
    (s, i) => "@type" + i.ToString()
).ToArray();

string inClause = string.Join(",", paramNames);
using (SqlCommand cmd = new SqlCommand(string.Format(cmdText, inClause))) {
    for(int i = 0; i < paramNames.Length; i++) {
       cmd.Parameters.AddWithValue(paramNames[i], types[i]);
    }
}

参考:Parameterize an SQL IN clause

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 2020-04-23
    • 2022-06-10
    • 2015-12-06
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多