Vb.net 如何将TimeSpan变量传递到数据库
我有这样的代码:Vb.net 如何将TimeSpan变量传递到数据库,vb.net,string,Vb.net,String,我有这样的代码: Dim starttime As TimeSpan = fromtimepicker.Value.TimeOfDay Dim endtime As TimeSpan = TotimePicker.Value.TimeOfDay 我试着像这样更新我的表: Dim sqlcmd As String = "update Location_tbl set StartTime='" & starttime & "' ,EndTime='" & endtime &
Dim starttime As TimeSpan = fromtimepicker.Value.TimeOfDay
Dim endtime As TimeSpan = TotimePicker.Value.TimeOfDay
我试着像这样更新我的表:
Dim sqlcmd As String = "update Location_tbl set StartTime='" & starttime & "' ,EndTime='" & endtime & "'
但是错误是这样发生的:
operator & is not defined for types 'string' and system.timespan
如何解决此问题使用
starttime.ToString(...)
在哪里。。。是格式字符串()-它取决于您使用的数据库。有时需要使用数据库功能进行转换。此错误与数据库无关。您正在尝试将
TimeSpan
变量与字符串
变量组合。您必须告诉.NET如何使用ToString
或string.Format
将时间跨度表示为字符串
将SQL语句设置为字符串后,就可以执行该语句了
您可能想考虑使用参数,而不是将字符串连接到语句中。
首先,您应该使用-----这是一个很好的实践,因为它会使SQL语句更容易阅读,而不必将每个值转换成字符串。它还将有助于避免对您可能拥有的任何字符串输入的可能攻击 其次,如何找到解决方案取决于这些列在数据库中的数据类型。如果它们是DateTime或Time,则可以按原样使用该值Dim sql As String = "update Location_tbl set StartTime= @starttime, EndTime= @endtime"
Using cn As New SqlConnection("Your connection string here"), _
cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@starttime", SqlDbTypes.DateTime).Value = fromtimepicker.Value.TimeOfDay
cmd.Parameters.Add("@endtime", SqlDbTypes.DateTime).Value = TotimePicker.Value.TimeOfDay
Return cmd.ExecuteScalar()
End Using
如果它们是字符串类型,那么只需将数据类型更改为SqlDbTypes.VarChar
之类的类型,并在末尾使用.ToString
传递值即可
旁注;我认为您在sql语句末尾缺少了一个
WHERE
子句(除非此表中只有一行?表中的StartTime
列的数据类型是什么?此外,最好使用@huMptyduMpty,因为确切的数据类型与错误无关。除了OP关于&运算符的问题外,还有将TimeSpan客户端CLR对象映射到SQL Server(或其他数据库)中对应对象的实际问题,OP可能还不知道。在SQL Server实现TimeSpan数据类型之前,在选择SQL Server类型时,时间是推荐的乱码,有时在客户端进行整数转换。@huMptyduMpty如果使用的是其他数据库,则必须使用相应的参数类--,等等。@ZevSpitz:Yes数据类型与错误无关。但是,给出一个正确的答案(进行SQL注入)是有帮助的,SQL注入不是这里的问题。OP是从一个TimeSpan
开始的,对于它,任何字符串格式都不会包含SQL语句(除非他使用startTime.ToString(“{0};DROP DATABASE dbname;-->”)
。使用参数仍然有充分的理由:1)避免本地计算机和服务器之间的格式冲突——例如mm/dd和dd/mm,2)效率,因为服务器不必每次都重新计算执行计划。@ZevSpitz-同意,尽管这是一个很好的做法。我已经更新了我的答案