2013-04-01 68 views
0

我試圖向表中添加新信息,但它給了我這個將日期/時間從字符轉換爲字符串時發生轉換失敗錯誤。將日期/時間對象傳遞給SQL時轉換失敗

這裏是我的代碼部分:

try 
{ 
    string sp = "add"; 

    comando.CommandType = CommandType.StoredProcedure; 
    comando.CommandText = sp; 
    comando.Parameters.Clear(); 

    comando.Parameters.Add(new SqlParameter("@person", SqlDbType.VarChar)); 
    comando.Parameters.Add(new SqlParameter("@reason", SqlDbType.VarChar)); 

    comando.Parameters.Add(new SqlParameter("@information", SqlDbType.VarChar)); 
    comando.Parameters.Add(new SqlParameter("@date", SqlDbType.DateTime)); 
    comando.Parameters[0].Value = obj.person; 
    comando.Parameters[1].Value = obj.reason; 
    comando.Parameters[2].Value = obj.information; 
    comando.Parameters[3].Value = obj.date; 
    comando.ExecuteNonQuery(); 
} 
catch (Exception exc) 
{ 
    throw exc; 
} 

爲了讓我使用obj.date = DateTime.Now;日期的信息是否正確呢?

+0

日期格式....... –

+0

'obj.date = DateTime.Now.ToString()'? – eandersson

回答

0

我不記得是如何或爲何有時將一個普通的日期/時間對象轉換成SQL,因爲我們預計它不會工作。

解決的辦法是將日期/時間對象轉換爲通用ISO 8601 formatyyyyMMdd HH:mm:ss.fff - SQL絕對喜歡。

這裏的一個代碼段,其從J W's answer需要,這實際上是展示最佳實踐:

const String UniversalDateTime = "yyyyMMdd HH:mm:ss.fff"; 

comando.CommandType = CommandType.StoredProcedure; 
comando.CommandText = sp; 

comando.Parameters.AddWithValue("@person", obj.person); 
comando.Parameters.AddWithValue("@reason", obj.reason); 
comando.Parameters.AddWithValue("@information", obj.information); 
comando.Parameters.AddWithValue("@date", obj.date.ToString(UniversalDateTime)); 

// assuming connection is already open 

comando.ExecuteNonQuery(); 

在SQL接收的日期/時間字符串表示,該值將自動轉換到SQL的內部日期/時間值。


PS。我還記得使用T作爲分隔符嘗試ISO 8601格式:yyyyMMddTHH:mm:ss.fff。嘗試帶有空間的版本,這對我在使用en-US SQL語言環境和非en-US語言環境時適用。

0

或者,你可以使用AddWithValue()

comando.CommandType = CommandType.StoredProcedure; 
comando.CommandText = sp; 

comando.Parameters.AddWithValue("@person", obj.person); 
comando.Parameters.AddWithValue("@reason", obj.reason); 
comando.Parameters.AddWithValue("@information", obj.information); 
comando.Parameters.AddWithValue("@date", DateTime.Now); 

// assuming connection is already open 

comando.ExecuteNonQuery(); 
+0

如果我嘗試obj.date = DateTime.Now.ToString()我得到一個錯誤。現在在數據庫上的日期類型是datetime – black1

+0

我假設'obj'是一個類。 date是什麼數據類型? –

+0

數據類型是datime – black1

相關問題