2010-02-03 44 views
1

我正在嘗試使用ADO.NET通過存儲過程進行數據庫更新。帶日期時間參數問題的ADO.NET更新命令

基本上我設置的所有參數和命令,並且已經設置像下面

DbParameter nm8 = provider.CreateParameter(); 
nm8.ParameterName = "@EDITDATE"; 
nm8.DbType = System.Data.DbType.DateTime; 
nm8.Value = aObject.ADateTime; 
command.Parameters.Add(nm8); 

在存儲過程中的參數中的一個,該輸入參數被定義爲

@EDITDATE  datetime = null, 

和基本上存儲的proc所做的只是獲得一條記錄,並通過傳入的EDITDATE進行更新。

但我收到此錯誤

將數據類型varchar轉換爲datetime時出錯。

,什麼我發現是,時間值被傳遞到存儲過程作爲像下面

2010-02-03 15:26:54.3100000 

代替

2010-02-03 15:26:54.310 

,我認爲這是什麼原因造成的鑄造錯誤。

所以我的問題是爲什麼ado.net以該格式轉換日期時間? 如何解決該問題而不以字符串形式傳遞值。

非常感謝。

回答

0

當然,這將引發在SQL Server 2005中的錯誤:

print cast('2010-02-03 15:26:54.3100000' as datetime) 

,而這工作得很好:

print cast('2010-02-03 15:26:54.31' as datetime) 

但是......是不是aObject.ADateTime的DateTime類型?這聽起來像是以字符串的形式傳遞給存儲過程。

如果它確實是一個字符串,我建議將其轉換爲DateTime你通過它以前:

nm8.Value = DateTime.Parse(aObject.ADateTime); 
+0

感謝您的答覆, ADateTime確實是DateTime類型。 這就是我不明白,DbType設置爲DateTime 和傳入的值也是一個DateTime對象(DateTime?精確) 這不是我需要做的嗎?爲存儲過程中的日期時間參數? – Eatdoku 2010-02-04 01:42:46

+0

@Eatdoku這絕對很奇怪。我從來沒有將DateTime傳遞給存儲過程的任何問題。你需要多少精度?你可以將DateTime四捨五入到最接近的秒數嗎? – 2010-02-04 01:52:56

+0

在我的情況下,最接近的一秒就足夠了。 但我認爲問題在於如何。net傳遞給存儲過程時將DateTime轉換爲字符串。 我現在的解決方案是直接傳遞DateTime.Tostring(格式)作爲DbType.String,它工作正常。 仍然對知道ado.net如何轉換datetime以及爲什麼會看到這個奇怪的結果感興趣。 謝謝 – Eatdoku 2010-02-04 16:53:41

0

你是否有程序對基類也可以使用的SqlParameter? (假設你使用連接到SQL Server),也許你可以嘗試設置SqlDbType屬性

SqlParameter sqlParam = (SqlParameter)nm8; //check if it's compatible before casting. 
sqlParam.SqlDbType = SqlDbType.DateTime 
+0

好點,我正在使用SQL Server。但是,而不是SqlDatProvider我使用DbProvider。也許這就是爲什麼轉換的DataTime字符串與SQL Server期望的有所不同。 – Eatdoku 2010-02-10 17:41:32