2011-10-22 86 views
1

我想从我的文本框字段值中存储时间,但我得到了此异常错误,我在做什么错误?谢谢!:无法将参数值从时间跨度转换为日期时间

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

哪一行引发错误,到底是什么? –

+0

嗨,当我执行我的SQL命令:retAutoID = CType(ExecuteScalar(dbCommand),整数) – k80sg

+2

错误消息说明了一切。 TimeSpan不是DateTime。这两种类型不兼容。 –

回答

7

DbType.Time被记录为:

表示SQL Server日期时间值的类型。如果您想使用SQL Server时间值,请使用SqlDbType.Time

所以要么使用SqlDbType.Time代替,的值设置为DateTime值,而不是TimeSpan值。

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

当然可以很容易地从一个TimeSpan构建一个DateTime如果你想 - 你应该在特定日期决定总是使用(例如2000 1月1日),这样你就可以比较的数据库和有效范围内的值只获得时间比特的比较。

+0

刚刚在今年发现,但当我尝试 db.AddInParameter(dbCommand,“TimeOfDayStart”,SqlDbType.Time,newFolderSelectionValue.TimeOfDayStart); 我得到 参数3:无法从 'System.Data.SqlDbType' 到 '的System.Data.DbType' 转换如果我尝试投它 db.AddInParameter(DbCommand和 “TimeOfDayStart”(DbType之) SqlDbType.Time,newFolderSelectionValue.TimeOfDayStart); 我得到 System.ArgumentException:没有从DbType 32到已知SqlDbType的映射。 –

+0

发现它会添加另一条评论,而不是回复你的评论。 –

0

为了使用AddInParameter用的数据类型时的列,您需要使用SqlDbType代替的DbType(如乔恩斯基特的答案描述)

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

,而不是

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

但。

为了您使用SqlDbType.Time而不是DbType.Time,你必须声明你的数据库对象作为SqlDatabase,即

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

,而不是

Database db = DatabaseFactory.CreateDatabase(); 

否则它赢得”取参数。

0

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

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

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