我正在尝试从我的文本框字段值存储时间但是我得到了这个异常错误,我做错了什么?谢谢!
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
答案 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());