2

我有这样的代码:

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

我该如何解决这个问题

4

3 回答 3

0

利用

 starttime.ToString(...)

其中 ... 是格式字符串 ( http://msdn.microsoft.com/en-us/library/ee372287.aspx ) - 这取决于您使用的数据库。有时需要使用数据库函数进行转换。

于 2013-07-16T10:35:39.727 回答
0

此错误与数据库无关。您正在尝试将TimeSpan变量与string变量结合起来。您必须告诉 .NET 应该如何将时间跨度表示为字符串,使用ToStringString.Format.

一旦您将 SQL 语句作为字符串,您就可以执行该语句。

您可能需要考虑使用参数而不是将字符串连接到语句中。

于 2013-07-16T10:36:10.793 回答
0

首先,您应该使用参数化查询——这是一种很好的做法,因为它会使您的 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子句(除非此表中只有每一行?)

于 2013-07-16T10:50:18.727 回答