0

我将datetime2其用作checkInand的数据类型checkOut。以前我可以使用此代码添加到数据库中。

//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”的签入值引起的,但这很奇怪,因为以前我可以将它添加到数据库中。

有人知道如何解决这个问题吗?

4

1 回答 1

1

看来您想丢弃 的时间部分checkInDate。使用ParseExact这样做并不是真正的正确方法。相反,您可以使用.DateDateTime 的属性,然后添加小时数。

另外,为了避免.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 存储在 Session 值中,无需将其存储为字符串。

我注意到您以美国日期格式 (MM/dd/yyyy) 引用了入住日期,但您的格式.ParseExact是“dd/MM/yyyy”。这也可能是麻烦的根源。

于 2015-12-20T15:17:40.190 回答