Обнуляемые типы идеально подходят для моей ситуации? - PullRequest
2 голосов
/ 23 октября 2009

Недавно преобразовал мой проект ASP.NET с 1.1 на 3.5. Ура! В настоящее время разрабатывается форма, которая имеет несколько необязательных полей. Обычно я выполняю код, добавляя тонны операторов if, проверяя пустое поле и устанавливая значение 0, если так. Итак, мне интересно, было бы лучше вместо этого объявить частные, обнуляемые переменные для каждого из этих полей, а затем добавить их в качестве параметров для моего обновления базы данных? Используя MSSQLS 2000, уже установите соответствующие поля для разрешения пустых значений.

Для пояснения: в веб-форме есть поля для сумм в долларах. Значение по умолчанию для входных данных равно 0, но если пользователь удаляет один из этих 0, оставляя поле пустым, а затем отправляет форму, в Convert.ToDecimal (MoneyField.Text) в списке аргументов метода, который будет передает все это в базу данных. Есть ли более чистый способ сделать это, чего мне не хватает?

Ответы [ 4 ]

1 голос
/ 23 октября 2009

Я думаю, что здесь есть путаница между проверкой поля и Nullable Type ... если, конечно, у вас нет какого-то типа ... скажем DateTime и вы хотите, чтобы он был нулевым ... что было бы невозможно если не используется типа Nullable.

Если это так, то ... да ... Решением могут быть обнуляемые типы.

1 голос
/ 23 октября 2009

Кажется необычным то, что у вас будет , что много полей, которые действительно могут обнуляться, но , если , вам нужно описать «нет значения» отдельно для любого значения магического домена (например, ) int, тогда да: Nullable<T> может помочь. Обратите внимание, что вы должны вручную перевести с null на DbNull.Value на уровне данных, так как null на SqlParameter означает "не отправлять этот параметр", не"отправить значение null "(если вы видите различие).

0 голосов
/ 23 октября 2009

Динамически создавайте свой sql на основе предоставленных полей.

0 голосов
/ 23 октября 2009

Да, звучит как план.

Вы должны изменить пару звонков, хотя

static class NConv
{
    static T? ToNullable<T>(string str) where T : struct
    {
        return (T?)(string.IsNullOrEmpty(str) ? default(T?) : Convert.ChangeType(str, typeof(T)));
    }

    static void HowTo()
    {
        double? myBonus = NConv.ToNullable<double>(null);
    }
}
...