#asp.net #visual-studio-2010 #strongly-typed-dataset #dataset-designer
#asp.net #visual-studio-2010 #строго типизированный-dataset #dataset-designer
Вопрос:
Мне нравятся многие встроенные функции, которые предоставляет встроенный конструктор наборов данных в VS2010, и я не хочу менять что-то совершенно другое, если это вообще возможно. Проблема в том, что для того, чтобы иметь необязательные параметры, мне нужно создавать полностью независимые функции для каждой комбинации параметров. Итак, для 6 параметров мне понадобилось бы 63 различных функции. Это, очевидно, совершенно неуправляемо.
Есть ли способ иметь одну функцию, которая добавляет параметр в сгенерированное предложение WHERE моего SQL только в том случае, если оно имеет значение, а в противном случае оно игнорирует его?
Комментарии:
1. Не могли бы вы использовать коллекцию параметров и создать свое предложение WHERE таким образом?
2. @Ramhound Не могли бы вы привести пример того, как это сделать?
Ответ №1:
Вы могли бы добавить эти необязательные параметры в WHERE-предложение с помощью ISNULL:
WHERE (YourTable.Column = ISNULL(@Column, YourTable.Column))
Таким образом, SQL работает с (необязательным) параметром или без него. Если значение равно null, это не повлияет на результат.
Вам нужно только добавить все параметры в набор параметров DataAdapter (необязательный с AllowDbNull
=true ). Но я уверен, что они будут автоматически добавлены правильно.
Комментарии:
1. Как мне добавить это в код конструктора наборов данных автоматического создания (xsd)?
2. Почему вы хотите что-то добавить? Параметры должны создаваться автоматически, когда они находятся в
Where-Clause
.3. Блестяще! Я как-то неправильно понял, что вы предлагали в первый раз. Есть ли у вас какое-либо представление о влиянии на производительность использования такого количества пустых и трюизмов (т.Е. Таблица. Столбец = Таблица. Столбец)?
4. Это не должно влиять на производительность, посмотрите следующую статью для сравнения
COALESCE
(что вы могли бы использовать точно так же)ISNULL
и «естественный»IS NULL OR ...
: blogs.x2line.com/al/archive/2004/03/01/189.aspx5. Я только что понял, что в использовании таблицы есть большое преимущество. Синтаксис столбца равен NULL вместо синтаксиса ISNULL. Если у вас есть нулевое значение в столбце в БД, использование ISNULL не вернет строку (из-за правил сравнения ANSI с нулевым значением). Если вы используете IS NULL , он вернет строку в любом случае (более ожидаемое поведение в этом случае).