2015-12-20 106 views
0

我使用datetime2作爲checkIncheckOut的數據類型。以前我可以用這段代碼添加到數據庫中。將datetime2插入數據庫

//value for checkIn = 12/25/2015 2:00:00 PM 
checkIn = DateTime.ParseExact(Session["checkInDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture).AddHours(14); 

//value for checkOut = 12/26/2015 12:00:00 PM 
checkOut = DateTime.ParseExact(Session["checkOutDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture).AddHours(12); 

strInsert = "INSERT INTO Reservation (checkInDate, checkOutDate) VALUES (@checkInDate, @checkOutDate)"; 

cmdInsert = new SqlCommand(strInsert, conn); 
cmdInsert.Parameters.AddWithValue("@checkInDate", checkIn); 
cmdInsert.Parameters.AddWithValue("@checkOutDate", checkOut); 

但現在不工作,我得到這個錯誤;

「轉換日期和/或時間從字符 字符串轉換失敗」。

我認爲錯誤是由包含「PM」和「AM」的檢入值引起的,但它很奇怪,因爲之前我能夠將其添加到數據庫中。

有沒有人知道如何解決這個問題?

+0

你確定你的兩列是'datetime2'嗎?在這種情況下,'AddWithValue' _might_可能會產生問題。你有沒有用'Add'試過並指定你的參數類型? –

+0

你會發布異常之前的日期值嗎? – Moe

+2

標記MySQL,但datetime2是SQL Server? –

回答

1

看來你想放棄checkInDate的時間部分。使用ParseExact來做到這一點並不是真正的方法。相反,您可以使用DateTime的.Date屬性,然後添加小時。

此外,爲了避免.AddWithValue可以給,只需使用.Add的麻煩,所以...

string s = "12/25/2015 2:00:00 PM"; 
DateTime checkIn = DateTime.Parse(s, CultureInfo.GetCultureInfo("en-US")).Date.AddHours(14); 
// .... 
string strInsert = "INSERT INTO Reservation (checkInDate, checkOutDate) VALUES (@checkInDate, @checkOutDate)"; 

using (SqlConnection conn = new SqlConnection(connStr)) 
{ 
    using (SqlCommand cmdInsert = new SqlCommand(strInsert, conn)) 
    { 
     cmdInsert.Parameters.Add(new SqlParameter("@checkInDate", SqlDbType.DateTime2).Value = checkIn); 
     // .... 
    } 
} 

請注意,您可以存儲一個DateTime在會話值,也沒有必要將其存儲爲一個字符串。

我注意到您引用了美國日期格式(MM/dd/yyyy)的簽入日期,但您的.ParseExact格式爲「dd/MM/yyyy」。這也可能是麻煩的來源。