2015-10-19 3 views
-2

Я пытался создать функцию поиска на веб-странице/форме. Это немного сложно, поскольку в нем есть несколько ящиков поиска.Случай с переключателем в SQL Server 2008 R2 R2

Он должен искать базу данных sql и возвращать правильные строки.

Я искал эквивалент коммутатора для выполнения определенного запроса, если значение равно null или нет. обычно, если пользователь не вводит идентификатор студента (первичный ключ), тогда он будет переходить к запросам, которые не включают параметр ID. Не уверен, что это правильная логика. Мои знания в sql довольно ограничены, извините, если это основной вопрос, но я не нашел решения в google, поскольку, по-видимому, никогда не было необходимости в этом. Я ищу хранимую процедуру, конечно

Вот что я имею в виду стрельбы в 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

Можете ли вы показать определение proc_CRUD? –

+1

[Динамические условия поиска в T-SQL] (http://www.sommarskog.se/dyn-search.html) может быть тем, что вам нужно было найти (это может быть немного многословным для начала, но, надеюсь, вы можете посмотреть на примеры и посмотреть, как они обычно работают) –

+0

Вы должны проверить [Может ли мы перестать использовать AddWithValue() уже?] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we- stop-use-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 - Да, вы можете. См. Мой обновленный запрос. –

Смежные вопросы