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をDBNullのようにNUllに割り当てる必要がありますが、直接行うことはできません。 AppDateをDateに変更すると、必要な形式が得られません。
どんな助けでも大歓迎です。
前もって感謝します。
AppDate =何も機能しないはずです。また、DateTime.MinValueを使用して、ビジネスロジックを更新して適切に処理することもできます。
AppDate =なし
mySQLデータベースに保存するために必要な形式の日付と時刻
データベースに保存する日時文字列を作成している場合、すべて間違っています。
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
これは実際には私にとって唯一の方法でした。たとえば、SQLフィールドがタイプChar(3)の場合は、System.Data.SqlTypes.Sqlデータ型.Nullを使用してから、System.Data.SqlTypes.SqlChars.Null、文字列を使用します。空か何も私にはうまくいきませんでした
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
Mysqlでは、接続文字列にConvertZeroDateTime=True
オプションを設定の場合にのみ、日時にNULL
値を許可します。この値はデフォルトでfalse
に設定されています。
MySqlドキュメント 説明:
ConvertZeroDateTime(デフォルト:False):
MySqlDataReader.GetValue()およびMySqlDataReader.GetDateTime()が、許可されていない値を持つ日付または日時列のDateTime.MinValueを返すようにするにはTrue。
AllowZeroDateTime(デフォルト:False):
Trueに設定すると、MySqlDataReader.GetValue()は、ゼロの日時値などの許可されていない値を持つ日付または日時列のMySqlDateTimeオブジェクトと、有効な値のSystem.DateTimeオブジェクトを返します。 False(デフォルト設定)に設定すると、System.DateTimeオブジェクトがすべての有効な値に対して返され、ゼロの日時値などの許可されていない値に対して例外がスローされます。
DbNull.ToString()
メソッドによって返される文字列値は空の文字列( "")です。これは、DbNullの文字列表現が空の文字列であることを意味している可能性があります。
AppDate = DbNull.Value 'does this work?