Обновление
После установления факта, что вы используете DateTime2(7)
для хранения данных в вашей базе данных, следующие гипотезы, естественно, заключались в том, что где-то в вашем коде данные сохраняютсяв SQL Server DateTime
.
Поскольку приоритет типа данных ставит DateTime2
в более высокий приоритет, чем DateTime
, ясно, что это неявное преобразование внутри SQL.
Это оставляет нам единственную возможность неявного преобразования в DateTime
SQL Server где-то между кодом c # и кодом SQL Server - и, конечно же, вот оно:
command.Parameters.Add(new SqlParameter(
parameter.Label,
parameter.Value
));
проблема с этим кодом - та же проблема , что и у метода AddWithValue
- поскольку мы не предоставляем тип данных, драйвер ADO.Net должен его угадать - и, как написано в статье, - онугадал
Правильный способ добавить параметры в команду - это использовать одну из перегрузок Add
, которая принимает как имя параметра, так и тип данных:
command.Parameters.Add("@ParamName", SqlDbType.DateTime2).Value = CSDateTimeInstance;
Из-за отсутствияВ этом контексте я не уверен, как вы можете включить это в свой код, но это правильное решение для этого случая.
Первая версия
В Sql Server,используйте DateTime2
.
Возможно, вы используете DateTime
с точностью до 1/300 секунды, в то время как DateTime2
имеет точность 100 нс.
из DateTime
страница:
Точность С округлением до .000, .003 или .007 секунд.
От DateTime2
страница:
Точность, масштаб от 0 до 7 цифр, с точностью до 100 нс.Точность по умолчанию составляет 7 цифр.