2017-01-23 16 views
0

因此,我目前正在使用Visual Studio 2013中的C#和SQL進行一些操作,並且希望製作一個表單,其中會有幾個文本框用於輸入搜索每個字段/列的標準可幫助更快地查找數據庫中的記錄。製作一個只有在值不爲空時運行的WHERE函數/空

用戶將能夠按照自己的意願將值輸入到任意數量的字段/框中。但是,我不確定如何爲它寫WHERE語句。 我知道如果我做WHERE FirstName =''它什麼都不會顯示,這意味着我必須附加WHERE。

我認爲它不會有像 公共無效QueryName(字符串FN,串LN,等等,等等)是個好主意 「SELECT * FROM表WHERE」 IF(名字!= 「」)THEN + 「姓= 'FN'」 + IF(姓氏!= 「」)THEN + 「姓氏= 'LN'」

,因爲它會打破(我認爲)如果它有一個WHERE後面什麼都沒有,和當用戶決定搜索哪些值時,我無法將每個追加部分都關閉爲「WHERE」。

所以我在找的是一種在C#中使用多個用戶選擇值創建SQL語句的方法,不需要它比需要的更長和更復雜。

如果我迷惑任何人,我會盡我所能解釋。

回答

1

你可以做這樣的事情:

SELECT * FROM Table WHERE (FirstName = '' OR FirstName = @FirstName) AND (LastName = '' OR LastName = @LastName 

這種方法可能會導致一些性能問題。

我喜歡用C#來識別用戶希望應用過濾器生成SQL查詢,像:

var sql = "SELECT * FROM Table WHERE 1 = 1 /* Just to not care about if the where clause is needed */"; 

if (!String.IsNullOrWhiteSpace(FirstName)) 
{ 
    sql += " AND FirstName = @FirstName "; 
} 

if (!String.IsNullOrWhiteSpace(LastName)) 
{ 
    sql += " AND LastName= @LastName"; 
} 
0

您可以使用這樣的查詢:

select * from YourTable a 
where (isnull(@FirstName, '') = '' or a.FirtName = @FirstName) and 
     (isnull(@LastName, '') = '' or a.LastName = @LastName); 

此代碼isnull(@FirstName, '') <> ''將檢查提供的值是否爲空,然後將其設爲空,否則保持不變。然後檢查它是否爲空。所以如果這個條件通過,那麼它將永遠不會嘗試與FirstName列進行比較。

相關問題