Как назначить нулевые значения в MySql с помощью VB.NET

Я не уверен, почему VB делает все такое. У меня есть поля, в которых хранятся дата и время в формате, необходимом для хранения в базе данных MySQL.

 Dim AppDate As String = String.Empty
      If Not String.IsNullOrEmpty(Me.AppDate.Text.Trim) Then
         AppDate = Format(CDate(Me.AppDate.Text), "yyyy-MM-dd h:mm:ss")
      Else
        //Need to assign a null value to AppDate 
      End If

Теперь мне нужно назначить AppDate для NUll, как DBNull, но я не могу сделать это напрямую. Если я изменю AppDate на Date, я не получу требуемый формат.

Любая помощь приветствуется.

Спасибо в Advance.

Ответы

Ответ 1

AppDate = Ничего не должно работать, вы также можете использовать DateTime.MinValue и обновить свою бизнес-логику для надлежащего лечения.

Ответ 2

AppDate = Nothing

Ответ 3

дата и время в формате, необходимом для хранения в базе данных MySQL

Если вы создаете строку datetime для сохранения в базе данных, вы делаете все неправильно.

Используя MySql Connector/Net, вы должны построить свой запрос следующим образом:

Dim sql As String = "UPDATE `MyTable` SET `MyField` = @MyField WHERE `ID` = @MyID"
Using cn As New MySqlconnection("..your connection string here.."), _
      cmd As New SqlCommand(sql, cn)

    cmd.Parameters.Add("@MyField", MySqlDbType.DateTime).Value = MyDateTimeVar ''# NO FORMATTING NEEDED!
    cmd.Parameters.Add("@MyID", MySqlDbType.Int).Value = MyIDIntegerVar

    cn.Open()
    cmd.ExecuteNonQuery()
End Using

Ответ 4

AppDate = DbNull.Value 'does this work?

Ответ 5

Строковое значение, возвращаемое методом DbNull.ToString(), представляет собой пустую строку (""), что может означать, что строковое представление DbNull является пустой строкой.

Ответ 6

Mysql позволяет использовать значения NULL для datetime, только если вы установите ConvertZeroDateTime=True в строке подключения. Для этого значения установлено значение false по умолчанию.


Документация MySql Описывает:

ConvertZeroDateTime (по умолчанию: False) :

Верно, что MySqlDataReader.GetValue() и MySqlDataReader.GetDateTime() возвращают DateTime.MinValue для столбцов даты или даты, которые имеют запрещенные значения.


AllowZeroDateTime (по умолчанию: False) :

Если установлено значение Истина, MySqlDataReader.GetValue() возвращает объект MySqlDateTime для столбцов даты или даты и времени, которые имеют запрещенные значения, такие как значения нулевого значения даты и времени, и объект System.DateTime для допустимых значений. Если установлено значение False (значение по умолчанию), это приводит к возврату объекта System.DateTime для всех допустимых значений и исключению, которое должно быть выбрано для запрещенных значений, таких как значения нулевого datetime.

Ответ 7

этот actully единственный способ, которым это сработало для меня, просто использовать System.Data.SqlTypes.Sql Тип данных. Null например, когда поле sql имеет тип Char (3), то используйте System.Data.SqlTypes.SqlChars.Null, string.empty или ничего не работает для меня

    Dim SQLCom = New SqlCommand
    Dim SQLCon As New SqlClient.SqlConnection(_ConnString)
    Dim _Param5 As New SqlParameter("@FieldName", SqlDbType.Char, 3)
    With SQLCom
        .Connection = SQLCon
        .CommandText = "StoredProcedure_name"
        .CommandType = CommandType.StoredProcedure
        .Parameters.Add(_Parameter5)
    End With
  _Parameter5.Value = System.Data.SqlTypes.SqlChars.Null