Вставка пустого строкового поля как нулевого в Access с VB.NET - PullRequest
1 голос
/ 04 января 2012

У меня есть пара текстовых полей в форме Windows.Одно из этих текстовых полей может иметь значение NULL.Когда я ввожу значение для каждого поля, оно все вставляется, нет проблем.Когда я оставляю поле (txtGewicht) пустым, я не могу вставить NULL в базу данных Access.

    If Double.TryParse(txtGewicht.Text, 0) Then
      klant.Gewicht = Double.Parse(txtGewicht.Text)
    Else
      klant.Gewicht = Nothing
    End If

Вот что я получаю:

"Невозможно установить столбец«Gewicht» в NULL, используйте вместо этого DBNull «

». Поэтому я изменил «Nothing» на DBNull.value, но затем он сообщает, что System.DBNull нельзя преобразовать в тип Double.

1 Ответ

0 голосов
/ 04 января 2012

A Double - это тип значения, а не ссылочный тип. Таким образом, по умолчанию он не обнуляется.

Если klant.Gewicht объявлен так:

Public Property Gewicht as Double

тогда он никогда не будет "нулевым" в том, что касается компоновщика команд.

Даже прямо говорят:

d = nothing

не имеет никакого эффекта, все равно будет 0.0

Вы можете попытаться реализовать свою собственность как Nullable (Double).

Это позволит считать свойство «нулевым». Я не уверен, что CommandBuilder подхватит это автоматически, но это только начало.

Также - мне интересен ваш метод Double.TryParse. Смысл второго аргумента состоит в том, чтобы сохранить результат синтаксического анализа (в случае успеха) в.

Ваш код может быть сокращен до:

If Not Double.TryParse(txtGewicht.Text, klant.Gewicht) Then
      klant.Gewicht = ' Some Default Value
End If

Edit:

Если вы прошли через код в отладчике, вы могли заметить, что значение klant.Gewicht было 0,0 (значение по умолчанию) даже после попытки установить его в ноль.

...