【问题标题】:(pass "all" in parameter ?) | how can I make parameter ? in WHERE filter to be a return of ALL in sql request(在参数中传递“全部”?)|我怎样才能使参数?在 WHERE 过滤器中返回 ALL 的 sql 请求
【发布时间】:2021-12-03 17:35:52
【问题描述】:

我正在制作一个遵循 MVVM 的 wpf C# 应用程序。 它通过 ServerExplorer 使用 DataSet 处理来自 accdb(具有多个连接的表)的数据。 我现在正在尝试进行过滤搜索。

        SELECT        IDBug, [Date], ReportedBy, Replicated, ReproducableSteps, AppArea, Status, FixedVer, FixedBy, Notes, Title
        FROM            Bugs
        WHERE      ([Date] >=  ?)
        AND ([Date] <= ?) 
        AND (Status = ?)
        AND (AppArea = ?)
        AND (Replicated = ?)
        AND (ReportedBy =  ?)

这是有效的,但前提是使用所有过滤器设置。

        int idAr = (from DataRow dr in ars.GetData().Rows
                                        where (string)dr["Area"] == AreaSe.ToString()
                                        select (int)dr["IDArea"]).FirstOrDefault();
        

        int idCust = (from DataRow dr in custs.GetData().Rows
                                          where (string)dr["CustomerName"] == CustomS.ToString()
                                          select (int)dr["IDCustomer"]).FirstOrDefault();


        BugTable = bugs.GetT(StartDate, StopDate, State, idAr, replicationS, idCust);

我的数据中确实有一些空值,这就是为什么我尝试做类似于

WHERE 标题 = ?或(?为空))

而不是

WHERE 标题 = ?

对于每个参数。但它搞乱了数据类型......

我认为为每种情况编写不同的 sql 查询并不聪明,所以我需要知道如何将“SELECT ALL”传递给一个?参数。

【问题讨论】:

  • 根据需要使用动态 SQL 添加额外的过滤谓词。或者,您可以使用下面@viveknuna 所示的OR 技巧,该技巧适用于小桌子;但是,当与中型(或大型)表一起使用时,它确实会对性能产生重大影响。

标签: c# sql parameter-passing


【解决方案1】:

您可以像这样在where 子句中使用case。您可以将null 作为参数的默认值传递。

因此,如果未通过,它将返回@param 的记录,否则将返回所有记录。

SELECT Col1, Col2….
FROM TableName 
WHERE ColName = CASE WHEN @param IS NULL THEN ColName ELSE @param END

【讨论】:

  • 你能不能给我一个带有比较符号的例子 WHERE ([Date] >= ?) AND ([Date]
  • 应该类似于 WHERE @parameter IS NULL OR Date > = @parameter;
  • VisualStudio TableAdapter 查询配置向导检测到无法识别的关键字 WHEN...
  • SELECT IDBug, [Date], ReportedBy, Replicated, ReproducableSteps, AppArea, Status, FixedVer, FixedBy, Notes, Title FROM Bugs WHERE ([Date] =CASE WHEN ? IS NULL THEN [Date] ELSE [Date] =>? END) AND ([Date] =CASE WHEN ? IS NULL THEN [Date] ELSE [Date] =
  • 我怀疑我做错了
猜你喜欢
  • 2021-12-24
  • 2017-06-05
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2020-12-22
相关资源
最近更新 更多