DateTime в SQLSERVER VisualStudio C #
-
26-09-2019 - |
Вопрос
У меня есть база данных в моем проекте с таблицей с именем «ProcessData» и столбцы с именем «START_AT» (тип: DateTime) и «END_AT» (тип: dateTime).
Когда я пытаюсь ввести новую запись в эту таблицу, она ввода данных в следующем формате: «ГГГГ / ММ / ДД HH: MM», когда я фактически хочу, чтобы он был в этом формате: «ГГГГ / ММ / ДД HH : мм: Ss '(недействителен в секунду).
Кто-нибудь знает почему, и что мне делать, чтобы это исправить?
Вот код, который я использую:
con = new SqlConnection("....");
String startAt = "20100413 11:05:28";
String endAt = "20100414 11:05:28";
...
con.Open();//open the connection, in order to get access to the database
SqlCommand command = new SqlCommand("insert into ProcessData (Start_At, End_At) values('" + startAt + "','" + endAt + "')", con);
command.ExecuteNonQuery();//execute the 'insert' query.
con.Close();
Большое спасибо
Решение
Используйте параметризованные запросы вместо создания запроса, используя строку Concat, как вы делаете сейчас.
SqlCommand command = new SqlCommand();
command.Connection = someConnectionObj;
command.CommandText = "INSERT INTO Sometable (datecolumn) VALUES (@p_date)";
command.Parameters.Add ("@p_date", SqlDbType.DateTime).Value = someDate;
command.ExecuteNonQuery();
Также используйте настоящие даты (DateTime DataType) вместо строк, которые похожи, что это будет дата.
Другие советы
Я только что попробовал это в SQL Server 2005, и я получаю, что сама запись содержит количество секунд.
Ты можешь попробовать:
select
Start_At,
convert(varchar(20), Start_At, 120) as Formatted_Start_At
from
ProcessData
и посмотрите, если форматтация_start_at содержит значение секунд.
Если это так, ваша БД содержит фактические значения, которые вы ожидаете от этого, и это просто вопрос форматирования вашего вывода.