如何将TimeSpan变量传递给数据库

时间:2013-07-16 10:32:40

标签: 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 & "'  

但错误是这样的:

operator & is not defined for types 'string' and system.timespan

我如何解决这个问题

3 个答案:

答案 0 :(得分:0)

使用

 starttime.ToString(...)

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

答案 1 :(得分:0)

此错误与数据库无关。您正在尝试将TimeSpan变量与string变量合并。您必须告诉.NET如何使用ToStringString.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子句(除非这个表中只有一行?)

相关问题