我有这样的代码:
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
我如何解决这个问题
答案 0 :(得分:0)
使用
starttime.ToString(...)
其中...是格式字符串(http://msdn.microsoft.com/en-us/library/ee372287.aspx) - 它取决于您使用的数据库。有时您需要使用数据库函数进行转换。
答案 1 :(得分:0)
此错误与数据库无关。您正在尝试将TimeSpan
变量与string
变量合并。您必须告诉.NET如何使用ToString
或String.Format
将时间跨度表示为字符串。
将SQL语句作为字符串后,就可以执行语句。
您可能需要考虑使用参数而不是将字符串连接到语句中。
答案 2 :(得分:0)
首先你应该使用parameterised query - 这是一个很好的做法,因为它会使你的SQL语句更容易阅读,你不必将每个值转换为字符串。它还有助于避免对您可能拥有的任何字符串输入进行SQL injection攻击。
其次,如何找到解决方案取决于这些列在数据库中的数据类型。如果它们是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
子句(除非这个表中只有一行?)