Может ли конструктор наборов данных в VS2010 поддерживать необязательные параметры?

#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.aspx

5. Я только что понял, что в использовании таблицы есть большое преимущество. Синтаксис столбца равен NULL вместо синтаксиса ISNULL. Если у вас есть нулевое значение в столбце в БД, использование ISNULL не вернет строку (из-за правил сравнения ANSI с нулевым значением). Если вы используете IS NULL , он вернет строку в любом случае (более ожидаемое поведение в этом случае).