我一直在使用日期选择器为用户选择一个短日期(英国格式),该程序抓取datepicker.text并将其保存为字符串(我知道:)熊与我一起)到一个sql数据库。
当我需要做某事时,我得到了值,转换为日期并进行比较。没问题!
我遇到了一个问题区域,它在sqlcommand命令文本的实际查询中比较了表单上存储的日期和日期选择器。它显然不会将日期与字符串进行比较。
所以我去改变我的数据库,将日期字段存储为日期而不是字符串。
从那时起,我一直有抓住任何日期的问题,因为我从日期选择器保存到SQL数据库中的那些由于某种原因变成了美国日期,所以当我提取它们时,它们然后是月和日的倒退。
如果我保存说2015年11月20日这是错误的,因为它不能保存日期,因为它太大了美国风格
我非常想回到将日期存储为实际工作的字符串,但宁愿正确地执行
是否有人对此问题有任何建议或做过任何变通办法。我最想听听他们
非常感谢答案 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日。