Вставьте и выберите дату из базы данных SQL Server - PullRequest
2 голосов
/ 16 марта 2011

У меня возникает следующее исключение, когда я пытаюсь выбрать данные из SQL Server или вставить данные в приложение C # для Windows. Я передаю дату, когда предложение запроса select в одинарных кавычках, например, '16 / 03/2011 'Сообщение об исключении показано ниже:

Преобразование типа данных char в тип данных datetime привел к значение даты / времени вне допустимого диапазона.

Есть ли идеальное решение для вставки и выбора даты из базы данных sqlserver, не относящейся к операционной системе. то есть работает как на итальянской, так и на английской ОС.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Если вы не можете использовать хранимые процедуры или параметризованные запросы, вы можете отформатировать дату в формате гггг-мм-дд.Ex.'2011-03-16'

ОБРАЗЕЦ T-SQL

INSERT INTO MyTable (SomeDate) VALUES ('2011-03-16') 

или

SELECT * FROM MyTable WHERE SomeDate <= '2011-03-16'

Кроме того, учитывайте временную часть даты.Если время не имеет значения, убедитесь, что вы его не храните, поскольку это может повлиять на ваши запросы SELECT в будущем.

2 голосов
/ 16 марта 2011

Используйте хранимые процедуры или параметризованные запросы.Это позволит вам передать объект C # datetime, и преобразование будет выполнено автоматически для вас.

Я бы предложил начать с SQLDataAdapter класса.Простым примером этого может быть:

using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM MyTable WHERE myDate = @myDate", someSqlConnection)
{
    da.SelectCommand.Paramaters.Add("@myDate", new DateTime());
    DataTable dt = new DataTable();
    da.Fill(dt);
}

Однако имейте в виду, что есть много разных способов достижения вашей цели.Исходя из вашего вопроса, я бы предположил, что вы создаете строки SQL и выполняете их для своей базы данных.Это считается плохой практикой по многим причинам (включая ту, которую вы описываете).Узнайте больше об ORM, таких как Entity Framework или NHibernate.

...