将数据插入sql数据库时的日期时间转换问题

时间:2011-06-30 06:01:07

标签: vb.net datetimepicker datetime

我曾经查询:

Dim a As String
a = "INSERT INTO tblVisitor(Name, Sex, TimeIn, EnterDate)
     VALUES('"& txtName.Text &"', '"& cboSex.Text &"', '"& Now() &"', '"& DateTime.Parse(cboEnterDate.Text) &"')"

myCommand = New SqlCommand(a, myConnection)
myCommand.ExecuteNonQuery()
........................................

哪个cboEnterDate是我的DateTime Picker。然后我收到了消息:

Conversion failed when converting date time from character string.

请帮忙。

4 个答案:

答案 0 :(得分:6)

通过构造一个字符串,你a)打开自己的SQL注入,和b)最终将字符串转换为日期时间到字符串到日期时间。

相反,如果您使用参数:

Dim a As String
a = "INSERT INTO tblVisitor(Name, Sex, TimeIn, EnterDate)
     VALUES(@Name, @Sex, @TimeIn, @EnterDate)"

myCommand = New SqlCommand(a, myConnection)
myCommand.Parameters.AddWithValue("@Name",txtName.Text)
myCommand.Parameters.AddWithValue("@Sex",cboSex.Text)
myCommand.Parameters.AddWithValue("@TimeIn",DateTime.Now)
myCommand.Parameters.AddWithValue("@EnterDate",DateTime.Parse(cboEnterDate.Text))
myCommand.ExecuteNonQuery()

仅执行字符串到日期时间的单次转换。但是,如果cboEnterDateDateTimePicker,则可以避免将其视为字符串:

myCommand.Parameters.AddWithValue("@EnterDate",cboEnterDate.Value)

答案 1 :(得分:2)

使用SQL参数查找。您现在使用的代码不仅容易解析日期格式的问题,而且容易受到SQL注入攻击。通过字符串连接创建SQL语句只是一个非常非常糟糕的主意。

答案 2 :(得分:1)

立即更改()到Now.ToShortTimeString应该解决问题。

编辑:糟糕,并且DateTime.Parse(cboEnterDate.Text)将.ToShortDate添加到最后。

答案 3 :(得分:1)

使用DateTime.Parse(cboEnterDate.Text)时,它会将字符串解析为日期时间对象。您应该直接发送字符串cboEnterDate.Text并让SQL服务器执行解析