在SQL 2008 Server R2中切换案例

问题描述:

我一直在试图在网页/表单上创建搜索功能。这有点复杂,因为它有多个搜索框。在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()' - 它可以导致意想不到的和令人惊讶的结果... –

您可以在存储过程中的查询做到这一点的:

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 - 是的,你可以。看到我更新的查询。 –