保存到sql时,VB日期选择器格式混乱

时间:2015-11-17 16:06:23

标签: sql vb.net date datepicker visual-studio-2015

我一直在使用日期选择器为用户选择一个短日期(英国格式),该程序抓取datepicker.text并将其保存为字符串(我知道:)熊与我一起)到一个sql数据库。

当我需要做某事时,我得到了值,转换为日期并进行比较。没问题!

我遇到了一个问题区域,它在sqlcommand命令文本的实际查询中比较了表单上存储的日期和日期选择器。它显然不会将日期与字符串进行比较。

所以我去改变我的数据库,将日期字段存储为日期而不是字符串。

从那时起,我一直有抓住任何日期的问题,因为我从日期选择器保存到SQL数据库中的那些由于某种原因变成了美国日期,所以当我提取它们时,它们然后是月和日的倒退。

如果我保存说2015年11月20日这是错误的,因为它不能保存日期,因为它太大了美国风格

我非常想回到将日期存储为实际工作的字符串,但宁愿正确地执行

是否有人对此问题有任何建议或做过任何变通办法。我最想听听他们

非常感谢

1 个答案:

答案 0 :(得分:1)

您的问题是您正在连接字符串以形成您的SQL语句,您提供的代码示例是:

"INSERT INTO tblTime (timeRef, timeDate) VALUES('" + txtReference.Text + "', '" + CDate(dteTimeDate.Text) + "')"

这将为您提供转换和截断问题(您遇到的问题),或者更糟糕的是,您将容易受到SQL注入攻击。您应该始终尽可能使用参数化查询。

您没有充分说明您当前使用的是什么,因此我将仅提供连接到SQL Server数据库并使用SqlCommand执行insert语句的通用示例:

Dim sql As String = "INSERT tblTime (timeRef, timeDate) VALUES (@timeRef, @timeDate);"

Using connection As New SqlConnection("Your Connection String")
    Using command As New SqlCommand(sql, connection)

        command.Parameters.Add("@timeRef", SqlDbType.VarChar, 50).Value = txtReference.Text
        command.Parameters.Add("@timeDate", SqlDbType.DateTime).Value = dteTimeDate.Value
        connection.Open()
        command.ExecuteNonQuery()

    End Using
End Using

<子> N.B。我有一段时间没有使用VB.NET所以请原谅任何轻微的语法错误,希望这个要点足够好开始

由于您明确告诉SQL Server参数@timeDate属于DateTime类型,因此格式没有歧义,您无需担心区域变化,或者是否01 / 02/2015是1月1日或2月2日。