Потеря точности DateTimeOffset при использовании С#

У меня есть таблица 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, поэтому кажется, что он был усечен.

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

Спасибо!
Дарвис


person DarLom    schedule 18.03.2010    source источник


Ответы (2)


SQL Server не имеет миллисекундной точности.

Вот статья с подробностями:

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

ИЗМЕНИТЬ

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

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

person Justin Niessner    schedule 18.03.2010
comment
Спасибо за информацию. Ссылка полезна. Что такое инспектор? - person DarLom; 18.03.2010
comment
Это просто возможность навести указатель мыши на переменную после достижения точки останова и увидеть ее значение. - person Justin Niessner; 18.03.2010
comment
SQL Server не имеет миллисекундной точности. Действительно? ОП специально указал, что он использует тип столбца datetimeoffset, который может иметь точность до 100 наносекунд msdn.microsoft.com/en-us/library/bb630289.aspx - person Mark Seemann; 03.12.2012
comment
Джастин, ссылка не работает, вы не знаете, куда ссылка была перемещена? - person r2evans; 27.08.2018
comment
@r2evans Я предполагаю, что sql-server-performance.com /2004/advanced-date-datetime-handling должен помочь. - person Justin Niessner; 28.08.2018

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

person Jason M    schedule 18.03.2010