从VB.Net到mysql数据库日期保存日期和时间?

时间:2014-02-13 14:40:52

标签: mysql vb.net

我将客户端信息插入到VB.Net 2010的MySql数据库中的Clients表中。问题是当它插入Date值时,MySql Date列显示:“0000-00-00”。

我需要做什么才能将兼容的日期格式插入MysQl数据库?

这是我试图做的代码:

Dim dtb, dtr As DateTime
DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker1.CustomFormat = "yyyy-mm-dd"
        dtb = DateTimePicker1.MinDate
        txtdtb.AppendText(dtb)

        DateTimePicker2.Format = DateTimePickerFormat.Custom
        DateTimePicker2.CustomFormat = "yyyy-mm-dd"
        dtr = DateTimePicker1.MinDate

            ExecSQL("INSERT INTO clients VALUES('" & clid.Text & "','" & clname.Text & "','" & clgen.Text & "','" & dtb & "','" & claddress.Text & "','" & clemail.Text & "','" & clphone.Text & "','" & clocp.Text & "','" & dtr & "')")
            MsgBox("Record Saved", MsgBoxStyle.Information, "Save")

            FillList(frmMember.lvMember, GetData("SELECT * FROM clients"))

        End If

4 个答案:

答案 0 :(得分:2)

您正在插入DateTimePicker1.MinDate而不是用户选择的实际值。

此外,使用大写月份,否则这些是分钟mm

DateTimePicker1.CustomFormat = "yyyy-MM-dd"
DateTimePicker2.CustomFormat = "yyyy-MM-dd"

最后,使用sql-parameters 而不是字符串连接来防止sql注入和本地化或转换问题。

以下是一个例子:

Using con As New MySqlConnection(My.Settings.ConnectionString)
    Using cmd = New MySqlCommand("INSERT INTO clients VALUES(@clid,@clname,@clgen,@dtb,@claddress,@clemail,@clphone,@clocp,@dtr)", con)
        cmd.Parameters.AddWithValue("@clid", Int32.Parse(clid.Text))
        ' .... '
        cmd.Parameters.AddWithValue("@dtr", dtr.Value)
        con.Open()
        Dim insertedClientCount = cmd.ExecuteNonQuery()
    End Using
End Using

答案 1 :(得分:1)

简而言之,您需要DateTimePicker1.value.tostring("yyyy-M-d")

CustomFormat DateTimePicker属性仅更改组件在表单上的显示方式,DateTimePicker的实际日期值存储在其Value属性中:

DateTimePicker1.Value

要更改日期的格式,您只需使用ToString(format as string)方法:

DateTimePicker1.Value.ToString("yyyy-M-d")

在MySQL中," 日期"数据类型仅存储日期,并接受格式为" 2017-03-20"因此我们使用格式" yyyy-M-d"在ToString函数中。

答案 2 :(得分:0)

我也有这样的问题,我通过将ToString(“s”)指定给我所有的DateTime变量来解决它

dtb.ToString('s')
dtr.ToString('s')

通过这种方式编写插入MySQL时,日期格式正确(2006-08-22T06:30:07)。

答案 3 :(得分:0)

零日期的问题可能是因为您读取了DateTimePicker的错误属性(MinDate而不是Value),但是这里有一个很大的问题。

如果使用字符串连接来形成Sql命令,那么您编写的代码非常弱。首先,您对Sql注入开放,第二,您不能确定您的输入值正确格式化为数据库引擎,如果您的用户在字符串字段中键入单引号,则可能出现第三次解析错误。

要解决所有这些问题,需要重写ExecSQL以接收参数集合

例如

 Dim pms As List(Of MySqlParameter) = new List(Of MySqlParameter)()
 pms.Add(new MySqlParameter("@id",clid.Text) ' Convert.ToInt32(clid.Text) if this is numeric'
 .... and so on for the other parameters ....

 ExecSql("Insert into clients " & _
         "VALUES(@id,@name,@gen,@dtb,@addr,@email,@phone,@clop,@dtr)",pms)


 Public Sub ExecSQL(command As String, pms As List(Of MySqlParameter))
     .. open the connection with using
     Dim cmd = new MySqlCommand(command, connection)
     cmd.Parameters.AddRange(pms.ToArray())
     cmd.ExecuteNonQuery();
 End Sub

正如您所看到的,命令文本现在更具可读性,并且不再有嵌入单引号的字符串连接。