2015-10-19 143 views
-2

我一直在試圖在網頁/表單上創建搜索功能。這有點複雜,因爲它有多個搜索框。在SQL 2008 Server R2中切換案例

它必須搜索sql數據庫並返回正確的行。

我一直在尋找一個相當於執行特定查詢的開關,如果一個值爲null或不是。通常如果用戶沒有輸入學生ID(主鍵),那麼它將進入不包含ID參數的查詢。不知道這是否是正確的邏輯。我在SQL中的知識是相當有限的atm,對不起,如果這是一個基本的問題,但我沒有找到谷歌解決方案,因爲顯然沒有人需要這樣做。我在尋找過程中的存儲過程

這裏就是我想燒製成一個SQL

using (SqlCommand cmd = new SqlCommand("Student_CRUD")) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@Action", "SEARCH"); 
    cmd.Parameters.AddWithValue("@StudentID", StudentID); 
    cmd.Parameters.AddWithValue("@FirstName", Name); 
    cmd.Parameters.AddWithValue("@Class", Class); 
    cmd.Parameters.AddWithValue("@RollNumber", RollNumber); 
    cmd.Connection = con; 

    con.Open(); 

    try 
    { 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 
    catch (SqlException exp) 
    { 
     Response.Write(exp); 
    } 
} 
+0

您是否也可以顯示'Student_CRUD' proc定義? –

+1

[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html)可能是您需要查找的內容(開始時可能有點羅嗦,但希望您可以查看這些例子,看看他們通常如何工作) –

+0

你應該看看[我們可以停止使用AddWithValue()了嗎?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-停止使用addwithvalue已經/),並停止使用'.AddWithValue()' - 它可以導致意想不到的和令人驚訝的結果... –

回答

1

您可以在存儲過程中的查詢做到這一點的:

WHERE FirstName = @FirstName 
    AND (@StudentID IS NULL OR (StudentID = @StudentID)) 
    AND (@Class NULL OR (Class = @Class)) 
    .... 

但是,您必須在代碼中將@studentID值設置爲空(DBNull.Value),以便將null值傳遞給sql查詢。所以當向這個查詢傳遞一個空值時,這個條件將被忽略。

+0

這聽起來很有希望,我可以鏈接那些AND?如果可以的話,我可以很容易地完成它。 –

+0

@RudraMatroja - 是的,你可以。看到我更新的查詢。 –