Ответ 1
AppDate = Ничего не должно работать, вы также можете использовать DateTime.MinValue и обновить свою бизнес-логику для надлежащего лечения.
Я не уверен, почему 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.
AppDate = Ничего не должно работать, вы также можете использовать DateTime.MinValue и обновить свою бизнес-логику для надлежащего лечения.
AppDate = Nothing
дата и время в формате, необходимом для хранения в базе данных 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
AppDate = DbNull.Value 'does this work?
Строковое значение, возвращаемое методом DbNull.ToString()
, представляет собой пустую строку (""), что может означать, что строковое представление DbNull является пустой строкой.
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.
этот 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