日期格式.NET到mysql

时间:2012-10-02 12:01:04

标签: mysql vb.net date datetime

我从mysql中提取日期值并以本地使用的格式显示它们。见下文:

我有这个日期时间值2012-11-01 08:00:00 ... yyyy-MM-dd HH:mm:ss

我需要这个显示为01-11-2012 08:00:00 ... dd-MM-yyyy HH:mm:ss

我可以简单地完成以下操作:

Dim dr As MySqlDataReader = cmd.ExecuteReader(sql)

If dr.Read()
    Dim mydate As DateTime = dr("date_column")

    txtDate.Text = mydate.ToString("dd-MM-yyyy") & " " & mydate.ToString("HH:mm:ss")
End If

这很好用,但我的问题是,如果我想从这个文本框更新记录,我不能使用这种格式的日期,因为mysql抱怨错误(对象超出范围或某事)。 / p>

所以我现在需要做的是将其转换回yyyy-MM-dd。这里的困难是.NET会自动假设我的dd值应该是MM值,反之亦然。

这导致01-11-2012的值11-01-2012写入数据库。

如何在保持此处使用日期的完整性的同时,将插入/更新的日期重新格式化为数据库?

提前致谢

3 个答案:

答案 0 :(得分:3)

使用parameterized query进行更新:

query = "UPDATE SomeTable SET date_column = @newDate WHERE record_id = @record_id"
conn = new SqlConnection("my connection string")

cmd = new SqlCommand(query, conn)
cmd.Parameters.Add("newDate", SqlDbType.DateTime).Value = new Date(txtDate.Text)
cmd.Parameters.Add("record_id", SqlDbType.Int).Value = record_id

'Rest of code to execute cmd

如果这不能正确解析TextBox中的日期,请事先用以下方法解析它:

Date.ParseExact(txtDate.Text, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture)

另外,该行:

txtDate.Text = mydate.ToString("dd-MM-yyyy") & " " & mydate.ToString("HH:mm:ss")

也可以写成:

txtDate.Text = mydate.ToString("dd-MM-yyyy HH:mm:ss")

可能更容易阅读。

答案 1 :(得分:2)

使用DateTime.Parse将新字符串转换回Date对象,然后使用ToString("yyyy-MM-dd hh:mm:ss")

将其插回MySQL

您还可以使用DateTime.ParseExact创建日期对象,并准确指定日期对象在字符串中的格式,如下所示:

Imports System.Globalization

Dim myNewDate As DateTime
myNewDate = DateTime.ParseExact("23-05-2012 15:45:35", "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture)

//InsertIntoMySQL is whetever method you use to insert into MySQL
InsertIntoMySQL("yyyy-MM-dd HH:mm:ss")

答案 2 :(得分:2)

尝试将文本框中的文本转换为DateTime类型,然后将其格式化为MySql标准。然后在insert和update语句中使用该字符串。

Convert.ToDateTime(textBox.Text).ToString("yyyy-MM-dd")