Вам необходимо использовать DBNull.Value
для представления NULL
в ADO.NET. Такие вещи, как адаптеры таблиц и Entity Framework, построенные на основе ADO.NET, могут поддерживать типы значений, допускающие значение NULL, и, таким образом, использовать Nothing
для представления NULL
, но сам ADO.NET предшествует типам значений NULL, поэтому Microsoft пришлось изобрести введите специально для представления NULL
.
Я бы предложил использовать оператор If
, чтобы сделать код более лаконичным:
Dim value As Date
cmd.Parameters.Add("@AdmDate", SqlDbType.Date).Value = If(Date.TryParse(tbAdmDate.Text, value),
value,
CObj(DBNull.Value))
CObj
требуется, потому что два возможных результата If
должны быть одного типа, а Date
и DBNull
не одного типа. Приведение одного возможного результата к типу Object
, они оба интерпретируются как тип Object
, и компилятор счастлив.
Обратите внимание, что, как я написал в этом примере, это сэкономит NULL
, если TextBox
содержит что-то, что не является допустимым представлением Date
. Вы можете использовать любую валидацию, подходящую для вашего конкретного случая, или, если вы уже проверили, просто проверьте наличие пустого TextBox
и используйте CDate
.