我正在按照 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 標題 = ? 或 (? 是 NULL))
代替
WHERE 標題 = ?
對于每個引數。但它弄亂了資料型別......
我不認為為每種情況撰寫不同的 sql 查詢是明智的,所以我需要知道如何將“SELECT ALL”傳遞給 ? 范圍。
uj5u.com熱心網友回復:
你可以像這樣使用caseinwhere子句。您可以將null引數作為默認值傳遞。
因此,@param如果未通過,它將回傳記錄,否則將回傳所有記錄。
SELECT Col1, Col2….
FROM TableName
WHERE ColName = CASE WHEN @param IS NULL THEN ColName ELSE @param END
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317065.html
上一篇:c#洗掉自定義串列的重復項
