Вставьте и выберите дату из базы данных SQL Server

2

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

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

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

  • 0
    Я бы всегда использовал формат ISO-8601 ( YYYYMMDD ) - он работает независимо от вашего языка и региональных настроек! Так что попробуйте 20110316 вместо 16/03/2011
Теги:
database
sql-server-2000

2 ответа

2
Лучший ответ

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

T-SQL SAMPLE

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

или

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

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

  • 1
    Спасибо за совет, будучи разработчиком, я должен иметь RTFM.
  • 0
    Джастин прав, что если вы не можете использовать параматеризованные запросы, это способ сделать это. Однако SqlDataAdapter существует с .NET 1.1, поэтому у вас не должно быть причин не использовать его !!
2

Используйте хранимые процедуры или параметризованные запросы. Они позволят вам передать объект С# 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.

  • 0
    Я согласен с вашим подходом. Как минимум, следует использовать параметризованные запросы. По крайней мере, это помогает предотвратить инъекцию SQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню