【问题标题】:Convert "dd/MM/yyyy" to "MM/dd/yyyy"将“dd/MM/yyyy”转换为“MM/dd/yyyy”
【发布时间】:2015-01-03 01:43:46
【问题描述】:

我在将日期插入数据库并显示时遇到问题。
我将 Visual Basic 2013 与 Microsoft SQL 数据库文件一起使用。
我有一个名为 Appointments 的表,有一个名为 Date 的列,其类型为日期。
我有一个带有 DateTimePicker 的表单,它以这种格式“dd/MM/yyyy”我的计算机区域设置显示日期。

当我尝试将其插入数据库时​​,通过从 DateTimePicker 获取日期如下:

DateTimePicker1.Value.Date

我仍然收到错误消息。我知道 Microsoft SQL 只采用这种格式“MM/dd/yyyy”,但是有没有办法使用 Visual Basic 和 sql 从“dd/MM/yyyy”转换为“MM/dd/yyyy”?

Dim con As New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=" + My.Settings.strTextbox + ";Integrated Security=True;Connect Timeout=30")
        Dim cmd As New SqlCommand("insert into Appointment (AssignDoc,Date,TimeFrom,FileNo) values (@AssignDoc,@Date,@TimeFrom,@FileNo)")
        cmd.Connection = con
        con.Open()
        cmd.Parameters.AddWithValue("@AssignDoc", ComboBox6.SelectedItem)
        cmd.Parameters.AddWithValue("@Date", DateTimePicker1.Value.Date)
        cmd.Parameters.AddWithValue("@TimeFrom", ComboBox1.SelectedItem)
        cmd.Parameters.AddWithValue("@FileNo", TextBox2.Text)
        Dim reader As SqlDataReader = Nothing
        Try
            cmd.ExecuteNonQuery()
            con.Close()
            'CreateAppointment()
            MsgBox("Appointment Created Successfully", MsgBoxStyle.Information, "Appointment Created")
            TextBox1.Text = ""
            TextBox2.Text = ""
        Catch ex As System.Exception
            MsgBox(ex.Message)
        End Try

【问题讨论】:

  • 我可以看看你的代码吗?你的错误是什么?
  • 尝试为 DateTimePicker 使用自定义格式。
  • 日期没有格式。 DatePicker 只是以给定的格式显示它,这听起来像是在不同的文化中。
  • MS SQL 可以采用任何格式。代码是什么,错误是什么?
  • 对不起,我添加了代码,它将这种格式插入数据库“dd/MM/yyyy”我希望它使用这种格式“MM/dd/yyyy”存储在数据库中跨度>

标签: sql-server vb.net date


【解决方案1】:

在 ADO.NET 中使用命令对象传递查询,并使用其机制插入参数。将日期作为字符串传递是问题的根源。您不能保证 SQL Server 数据库将配置为与您的硬编码日期格式兼容的排序规则。

How to pass a parameter from vb.net

【讨论】:

    【解决方案2】:

    您的语句 I know that Microsoft SQL only takes this format "MM/dd/yyyy" 本身是错误的,因为 SQL 采用任何指定格式的日期 here

    您只需将它们转换为该格式,然后再将其输入数据库。

    例如如果您以“mm/dd/yyyy”格式传递参数,则需要在 sql 中将其转换为

    insert into Appointments (Date) values (convert(date,@parameter,101));
    

    http://www.sqlfiddle.com/#!3/65cdd/1/0

    【讨论】:

    • 我的 DateTimePicker 显示这种格式 "dd/MM/yyyy" 但我希望它以这种格式 "MM/dd/yyyy" 存储在数据库中。我这样做了,但仍然没有运气,以与我的 DateTimePicker 相同的格式存储............ Dim cmd As New SqlCommand("insert into Appointment (AssignDoc,Date,TimeFrom,FileNo) 值 (@AssignDoc,convert(日期,@Date,101),@TimeFrom,@FileNo)")
    • 无论您传递给SQL 的格式是什么,它都只会以标准格式保存在表中。您必须在插入或检索时编写查询以相应地更改格式。由于现在您将其保存为 MM/dd/YYYY 格式,在检索时将其写为convert(varchar(50),Date,101),它将以 MM/dd/YYYY 格式为您提供输出
    • 对不起,我很困惑,我的选择语句检索的日期大于今天的日期。我应该把 convert(varchar(50),Date,101) 放在哪里我的选择语句。
    • select convert(varchar(50),Date,101) from Appointments where Date > GetDate()
    • 不工作!不显示大于今天日期的日期,我不知道当它作为日期存储在数据库中时为什么要将其转换为 varchar。我想一起比较两个日期???提前致谢。
    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2011-03-18
    相关资源
    最近更新 更多