Потеря точности DateTimeOffset при использовании C # - PullRequest
2 голосов
/ 18 марта 2010

У меня есть таблица SQL Server с полем CreatedDate типа DateTimeOffset (2).
Пример значения в таблице: 2010-03-01 15: 18: 58.57 -05: 00

Например, из C # я получаю это значение следующим образом:

var cmd = new SqlCommand("SELECT CreatedDate FROM Entities WHERE EntityID = 2", cn);  
var da = new SqlDataAdapter(cmd);  
DataTable dt =new DataTable();  
da.Fill(dt);

И я смотрю на значение:
MessageBox.Show (dt.Rows [0] [0] .ToString ());

Результат 2010-03-01 15:18:58 -05: 00, в котором отсутствует .57, хранящийся в базе данных.

Если я посмотрю на dt.Rows [0] [0] в окне Watch, я также не вижу .57, поэтому кажется, что он был усечен.

Может кто-то пролить свет на это? Мне нужно использовать дату, чтобы сопоставить ее с другими записями в базе данных, и нужен .57.

Спасибо!
Darvis

Ответы [ 2 ]

1 голос
/ 18 марта 2010

SQL Server не обладает точностью до миллисекунды.

Вот статья, которая углубляется в детали:

Расширенная обработка данных DATE и DATETIME в SQL Server

EDIT

Я предполагаю, что C # не должен показывать такое же поведение. Помните, что метод DateTime.ToString() не включает миллисекунды, если вы не укажете поставщика формата.

Окно Watch также будет показывать вам ToString(). Попробуйте установить точку останова и использовать Инспектор, чтобы получить более подробную информацию и сохранить ваши миллисекунды.

0 голосов
/ 18 марта 2010

Заполнение должно изменить данные в наборе данных, чтобы они соответствовали данным в источнике данных - пробовали ли вы какие-либо другие методы для получения данных, чтобы увидеть, получают ли другие классы данные в том формате, на который вы рассчитывали? Простые тесты, такие как sqldatasource / gridview и т. Д.

...