无法将参数值从TimeSpan转换为DateTime

时间:2011-10-22 08:04:15

标签: asp.net .net sql vb.net

我正在尝试从我的文本框字段值存储时间但是我得到了这个异常错误,我做错了什么?谢谢!

Failed to convert parameter value from a TimeSpan to a DateTime.

传递文本框值:

.CamActiveDateFrom = CDate(uitxtCamDateStart.Text.Trim)

我的变量和属性:

Private _camActiveTimeFrom As Nullable(Of TimeSpan)

Public Property CamActiveTimeFrom() As Nullable(Of TimeSpan)

Get     

Return Me._camActiveTimeFrom        

End Get     

Set(ByVal value As Nullable(Of TimeSpan))            

Me._camActiveTimeFrom = value      

End Set    

End Property

参数:

 AddInParameter(dbCommand,

    "@ActiveTimeFrom", DbType.Time, 6, DBNull.Value)                

    If (.CamActiveTimeFrom).HasValue Then

     dbCommand.Parameters("@ActiveTimeFrom").Value = .CamActiveTimeFrom     

End If

3 个答案:

答案 0 :(得分:7)

DbType.Time记录为:

  

表示SQL Server DateTime值的类型。如果要使用SQL Server时间值,请使用SqlDbType.Time

所以 使用SqlDbType.Time而不是将值设置为DateTime值而不是TimeSpan值。< / p>

不可否认this mapping table显示DbType.Time映射到TimeSpan,因此这里存在一些不一致 - 但如果您可以使用更具体的类型,那只能是好的。

当然,如果你愿意,可以很容易地从DateTime构建一个TimeSpan - 你应该决定一个特定的日期来永远使用(例如2000年1月1日),这样你就可以比较数据库中的值和有效地只能比较时间位。

答案 1 :(得分:0)

为了将AddInParameter与数据类型为time的列一起使用,您需要使用SqlDbType而不是DbType(如Jon Skeet的回答中所述)

db.AddInParameter(dbCommand, "@ActiveTimeFrom", SqlDbType.Time, 6, DBNull.Value)   

而不是

db.AddInParameter(dbCommand, "@ActiveTimeFrom", DbType.Time, 6, DBNull.Value)   

BUT。

为了使用SqlDbType.Time而不是DbType.Time,必须将Database对象声明为SqlDatabase,即

SqlDatabase db = (SqlDatabase)DatabaseFactory.CreateDatabase();

而不是

Database db = DatabaseFactory.CreateDatabase();

否则它不会参加该参数。

答案 2 :(得分:0)

我有同样的问题。我只是使用了“ToString()”来解决它。

我的代码如下: “info.START_TIME”的日期类型是TimeSpan。

db.AddInParameter(dbCommand, "@START_TIME", DbType.Time, info.START_TIME.ToString());