Можно ли передать параметр DB.null и установить значение в базе данных, равное этому? - PullRequest
2 голосов
/ 13 декабря 2011

Я извлекаю данные из базы данных (1 запись) и помещаю каждое значение в текстовое поле или выпадающий список.Некоторые из этих значений - DB.null.Если они есть, я конвертирую каждый из них в "" (пусто).Однако, как только пользователь изменил текстовые поля / выпадающий список, он может «сохранить» новые результаты.Моя проблема заключается в следующем:

Если пользователь оставляет что-то пустое, я хочу иметь возможность утверждать, что значение DB.null.Есть ли способ сделать это?

Кроме того, возможно ли, что если в текстовом поле есть значение и пользователь решает удалить его, я также могу преобразовать его в DB.Null?Вот что я пытался сделать, чтобы дать вам, ребята, некоторую идею:

productName != ""
    ? myCommand.Parameters.AddWithValue("@ProductName", productName)
    : myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value);

Ответы [ 5 ]

6 голосов
/ 13 декабря 2011

С SQL Server я считаю, что вы можете взаимозаменяемо использовать null или DBNull.Value, чтобы установить значение NULL.

Я бы также изменил ваш код на:

myCommand.Parameters.AddWithValue(
    "@ProductName",
    // this requires a cast as ?: must return the same type
    String.IsNullOrWhiteSpace(productName)
        ? (object)DBNull.Value
        : (object)productName
);

Или используя null и без явного приведения:

myCommand.Parameters.AddWithValue(
    "@ProductName",
    ! String.IsNullOrWhiteSpace(productName) ? productName : null
);
2 голосов
/ 13 декабря 2011

Допустимо проверить наличие пустой строки и затем использовать:

myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value)

, если это так, например:

if (string.IsNullOrEmpty(ProductName)) {

    myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value);

} else {

    myCommand.Parameters.AddWithValue("@ProductName", ProductName);

}
0 голосов
/ 13 декабря 2011

Немного короче версия:

myCommand.Parameters.AddWithValue(
    "@ProductName", 
    productName == null ? DBNull.Value : (object)productName
);
0 голосов
/ 13 декабря 2011

Лучше не связывать ориентированные на данные типы (например, DBNull) с вашим TextBox.Хотя это может сделать ваш код более чистым на стороне данных, нет встроенного способа автоматического преобразования пустой строки в DBNull.

. Чистым способом на вашей стороне БД будет

myCommand.Parameters.AddWithValue(
    "@ProductName",
    productName.IsNullOrEmpty() ? (object)(DBNull.Value) : productName
);
0 голосов
/ 13 декабря 2011

Если вы работаете с .Net 2.0 или выше, рассмотрите возможность использования структуры Nullable (Of T) .Это позволяет действительно легко проверять значения Null, и вы можете просто добавить свойство .Value объекта в TextBox, если они указали значение.Эти объекты по умолчанию имеют значение null, поэтому при переходе к обновлению записей в базе данных, если значение не указано, вы оставляете переменную в покое, и NULL попадет в вашу базу данных.

Я признаю, что сначала немного странно работать (вы должны помнить об использовании свойства .Value при привязке к TextBox), но после этого начального препятствия структура весьма удобна, если вы 'мы будем иметь дело со многими полями базы данных, которые потенциально могут иметь значения, которые можно обнулять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...