【问题标题】:ADO.NET TableAdapter parametersADO.NET 表适配器参数
【发布时间】:2010-10-13 14:03:02
【问题描述】:

我有一个查询,我希望通过一个包含“IN”子句的 ASP.NET TableAdapter 来运行,该子句通过参数接收它的值。

我的问题是,如何指定这个参数?我想过这样写条件语句:

AND b.group_category_id in (@ParamList)

@ParamList 是参数的字符串,例如"4,12,45,23" 但由于指定的 id 是一个整数,它抱怨它不能将字符串转换为整数。这是有道理的,但是有没有办法在 ASP.NET TableAdapter 的 SQL 语句中指定这样的列表?

【问题讨论】:

  • 恐怕我不能真正接受这里的答案,因为事实证明,如果不使用我不想做的解决方法,它就无法真正完成。对不起!

标签: asp.net sql ado.net tableadapter


【解决方案1】:

您可能会查看http://dotnet.org.za/johanvw/archive/2008/06/13/mssql-split-function.aspx 并将其作为字符串传递。一种解决方法而不是解决方案。但这只有在您使用 MSSQL 时才可用。

【讨论】:

    【解决方案2】:

    我见过的一种解决方法:

    WHERE charindex(',' + cast(b.group_category_id as varchar) + ',', @ParamList) > 0
    

    在这种情况下,@ParamList 将是格式为“,4,12,45,23”的字符串

    它不是“漂亮”,但保留了编译查询的参数和好处。由于您正在搜索数字,因此子字符串保证了唯一匹配。

    【讨论】:

      【解决方案3】:

      您可以将@ParamList 作为逗号分隔的字符串传递,解析字符串并将结果插入#table,然后使用IN 搜索#table:

      AND b.group_category_id in (select group_category_id from #group_category_id_list)
      

      除此之外,您的选择是有限的,除非您想使用动态 SQL(exec() 语句),但我建议您尽可能避免这种情况。

      【讨论】:

      • 是的,我试图避免使用动态 SQL。
      【解决方案4】:

      回答我自己的问题:不可能。

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 2014-09-06
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多