我曾经查询过:
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选取器。然后我收到消息:
Conversion failed when converting date time from character string.
请帮忙。
通过构造一个字符串,您可以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()
它只执行字符串到日期时间的单一转换。尽管如此,如果cboEnterDate
是DateTimePicker,则可以完全避免将其视为字符串:
myCommand.Parameters.AddWithValue("@EnterDate",cboEnterDate.Value)
使用SQL参数查找。您现在使用的代码不仅容易出现带有r/r/t日期格式的解析问题,而且容易受到SQL注入攻击。通过字符串串联创建SQL语句是一个非常非常糟糕的主意。
将Now((更改为Now.ToShortTimeString这应该可以解决问题。
编辑:Oops和DateTime.Parse(cboEnterDate.Text(将.ToShortDate添加到末尾。
使用DateTime.Parse(cboEnterDate.Text)
时,它会将字符串解析为日期时间对象。您应该直接发送字符串cboEnterDate.Text
,并让SQL服务器进行解析