Сбой минимального значения ADO.NET в столбце даты SQL Server 2008 - PullRequest
0 голосов
/ 14 августа 2010

Я пытаюсь сделать следующее:

using (var tx = sqlConnection.BeginTransaction())
{
 var command = sqlConnection.CreateCommand();
 command.Transaction = tx;
 command.CommandText = "INSERT INTO TryDate([MyDate]) VALUES(@p0)";
 var dateParam = command.CreateParameter();
 dateParam.ParameterName = "@p0";
 dateParam.DbType = DbType.Date;
 dateParam.Value = DateTime.MinValue.Date;
 command.Parameters.Add(dateParam);
 command.ExecuteNonQuery();
 tx.Commit();
}

где таблица имеет столбец Дата SQL Server 2008. Я могу вставить значение '01 / 01/0001 'в это через SQL Management Studio.

Если я запускаю вышеупомянутое в ExecuteNonQuery, я получаю «переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 31.12.9999 11:59:59 PM» исключение.

Почему это? Поле даты SQL Server действительно принимает 01/01/0001.

Ответы [ 3 ]

1 голос
/ 14 августа 2010

Это работает ...

var command = sqlConnection.CreateCommand();
command.Transaction = tx;
command.CommandText = "INSERT INTO TryDate([MyDate]) VALUES(@p0)";
SqlParameter dateParam = new SqlParameter();
dateParam.ParameterName = "@p0";
dateParam.SqlDbType = SqlDbType.Date;
dateParam.Value = DateTime.MinValue.Date;
command.Parameters.Add(dateParam);
command.ExecuteNonQuery();
0 голосов
/ 17 января 2013

DbType.Date - это просто псевдоним для DbType.DateTime , поскольку он был задуман задолго до того, как в SQL Server 2008 появилась поддержка дат.Вы можете увидеть всю историю здесь: http://connect.microsoft.com/VisualStudio/feedback/details/646183/wrong-code-in-sqlparameter-dbtype-set-property.

Короткая история: в ответ на вопрос Уилла вы можете использовать SqlDbType.Date , который не является псевдонимом.

0 голосов
/ 14 августа 2010

как говорит ошибка Должно быть между 01.01.1753 12:00:00 и 31.129999 11:59:59 вечера.

Столбцы SQLServer DateTime имеют минимальные и максимальные значения, отличные от переменной dateTime в CLR.

Возможно, вы захотите включить логику в свою программу, чтобы защитить базу данных от времени, выходящего за пределы диапазона SQLServer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...