将datetime2插入数据库

本文关键字:数据库 插入 datetime2 | 更新日期: 2023-09-27 18:27:25

我使用datetime2作为checkIncheckOut的数据类型。以前我可以用这个代码添加到数据库中。

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

有人知道怎么解决这个问题吗?

将datetime2插入数据库

您似乎想要放弃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存储在Session值中,不需要将其存储为字符串。

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