2017-01-23 2 views
0

Так что я сейчас делаю с C# и SQL на визуальных студиях 2013 года и хочу создать форму, в которой будет несколько текстовых полей для ввода в поиск критерии для каждого поля/столбца, чтобы быстрее находить записи в базе данных.Выполнение функции WHERE, которая работает только в том случае, если значение не пусто/null

Пользователь сможет вводить значения в столько полей или полей, сколько захочет. Тем не менее, я не уверен, как написать инструкцию WHERE. Я знаю, что если я сделаю WHERE FirstName = '', это ничего не покажет, то есть я должен добавить WHERE.

Я предполагаю, что это не было бы хорошей идеей, чтобы иметь что-то вроде общественной ничтожной QueryName (строка FN, струнный LN, и т.д., и т.д.) "SELECT * FROM Таблица WHERE" IF (FirstName! = "") THEN + "FirstName = 'FN'" + IF (LastName! = "") THEN + "LastName = 'LN"

, как это нарушило бы (я предполагаю), если он был WHERE следует ничего, и Я не могу начинать каждую часть добавления с «WHERE», когда пользователь решает, какие значения он ищет.

Так что я ищу способ сделать инструкцию SQL на C#, используя несколько значений выбора пользователей, не будучи более длинным и сложным, чем это должно быть.

Если я смущаю кого-либо, я сделаю все возможное, чтобы объяснить.

ответ

1

Вы можете сделать что-то вроде этого:

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

Этот подход может вызвать некоторые проблемы с производительностью.

Я предпочитаю строить запрос SQL с помощью C#, чтобы определить фильтры, которые пользователь хочет применить, как это:

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, '') <> '' проверяет, имеет ли значение значение null, а затем делает его пустым, иначе оставьте его в покое. Затем проверяет, пуст ли он. Поэтому, если это условие проходит, то он никогда не попытается сравнить с столбцом FirstName.