Каков наилучший способ записи «нулей» в базу данных SQL при представлении параметров в выпадающем списке? - PullRequest
0 голосов
/ 24 февраля 2009

Я пишу интерфейс в базу данных, представляя варианты в виде списков. И мне нужно иметь возможность возвращать нули в базу данных.

В настоящее время у меня есть решение, которое заключается в том, чтобы «подделать» запись в запросе для заполнения Datatable, а затем определить выбор и жесткое кодирование null в моем операторе обновления, если этот элемент выбран.

--GetDataByAvailableTechs query 
            SELECT     tblLEMSCredentialsId, TechNumber
            FROM         tblLEMSCredentials AS aLEMSCreds
            UNION ALL
            SELECT     '99999' AS Expr1, '<NONE>' AS Expr2

.

            //populate combo box
            BV_LEMSHIPDataSet.tblLEMSCredentialsDataTable dtAvailableTechs = taLEMSCreds.GetDataByAvailableTechs(selectedSerial);  
            cboTechNumber.DataSource = dtAvailableTechs;

.

            //Save back to DB
            if (lemsCredsID == 99999)
            {
                taDevice.UpdateQuery_Restage(null, selectedSerial);
            }
            else
            {
                taDevice.UpdateQuery_Restage(lemsCredsID, selectedSerial);
            }

Может кто-нибудь предложить лучший способ сделать это, пожалуйста? Мне нужно, чтобы приложение справлялось с другими 5 подобными полями, и я не хочу создавать множество версий моего обновления, если не еще.

G

Ответы [ 4 ]

3 голосов
/ 24 февраля 2009

В прошлом я использовал аналогичный подход, но использовал значения минус для значений NULL - таким образом вы можете обрабатывать все, что меньше нуля, как NULL в одном операторе if.

Это предполагает, что ваши идентификаторы в таблице всегда положительны:)

2 голосов
/ 24 февраля 2009

Нулевой объектный образец. Сделайте так, чтобы он возвращал пустую строку для пользовательского интерфейса и предоставил вызов метода для извлечения значения при обновлении базы данных. В обычных случаях это вернет ваше истинное значение, но нулевой объект переопределит это поведение, чтобы дать вам нулевое значение.

Магические числа не требуются, и все, что вам нужно сделать, это добавить это значение в начало «привязываемых значений», когда вы связываете свой контроль с источником данных.

1 голос
/ 24 февраля 2009

Вы можете поместить строковое значение в качестве 'нулевого значения' поля со списком, например: "thenullvalue", а затем проанализировать значение поля со списком в обнуляемый тип int (int?). Для правильного выбора вы получите желаемое значение, для 'нулевого выбора' вы получите нулевое значение (разбор «thenullvalue» в int даст вам нулевое значение):)

Затем сохраните значение в базе данных так же, как:

int? lemsCredsID = parseInt(combobox.Value);

 //Save back to DB
taDevice.UpdateQuery_Restage(lemsCredsID, selectedSerial);

В зависимости от вашего провайдера БД, вам также может понадобиться преобразовать пустое значение типа NULL в DBNull, например:

taDevice.UpdateQuery_Restage((lemsCredsID==null ? DBNull : (int)lemsCredsID), selectedSerial);

Надеюсь, это поможет.

0 голосов
/ 24 февраля 2009

Если значение предназначено для нулевого значения, передача нулевого значения в базу данных будет хорошим решением, это уменьшает дополнительную логическую обработку для специальных значений для нулевых значений и может быть довольно рискованным и неоднозначным.

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

например. вы можете преобразовать null в string.Empty перед привязкой элемента управления, а также вы можете преобразовать string.Empty в null перед передачей в базу данных.

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