У меня есть следующее исключение, когда вы пытаетесь выбрать данные с SQL Server или вставляете данные с помощью приложения Windows С#. Я передаю дату в том, где предложение select query в одинарных кавычках, подобных этому '16/03/2011 'Сообщение об исключении показано ниже:
Преобразование типа данных char в тип данных datetime привел к вневременное значение времени.
Есть ли идеальное решение для вставки и выбора даты из базы данных sqlserver, не относящейся к операционной системе. то есть работает как на итальянской, так и на английской ОС.
Если вы не можете использовать хранимые 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 по дороге.
Используйте хранимые процедуры или параметризованные запросы. Они позволят вам передать объект С# 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.
YYYYMMDD
) - он работает независимо от вашего языка и региональных настроек! Так что попробуйте20110316
вместо16/03/2011