2015-12-20 5 views
0

Я использую datetime2 как тип данных для checkIn и checkOut. Раньше я могу добавить в базу данных с этим кодом.Вставить 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_ может создать проблему. Вы когда-нибудь пробовали его с помощью «Добавить» и указали свой тип параметра? –

+0

Вы отправили бы значения из ваших дат до исключения? – Moe

+2

Tagged MySQL, но datetime2 является SQL Server? –

ответ

1

Похоже, что вы хотите отменить временную часть checkInDate. Использовать ParseExact, чтобы сделать это не совсем правильно. Вместо этого вы можете использовать свойство .Date DateTime, а затем добавить часы.

Кроме того, чтобы избежать неприятностей, которые могут дать .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». Это также может быть источником неприятностей.

Смежные вопросы