【发布时间】: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