2011-10-22 82 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());