Описание: У меня есть код C #, который создает новую таблицу на моем SAS-сервере с использованием OLEDB:
"CREATE TABLE SASUSER." + tableName + " (time DATETIME, value NUM)";
Затем он использует цикл FOR для добавления некоторых значений из a.NET DataSet
.time
- это DateTime
объект, а value
- это просто Double
.:
"INSERT INTO SASUSER." + tableName + " (time, value) VALUES (" + time.Ticks + " , " + value + ")"
Потребовалось какое-то случайное предположение, чтобы выяснить, что столбец времени будет принимать только числа, а не типичную строку даты (например, «06/26/11 13:24:11»).
Проблема: Несмотря на то, что для столбца времени был указан DATETIME, отображается только дата (мм / дд / гггг), а не время.Например, если я заменю «time.Ticks» на 10 или 10,5, то 1/11/1960 будет сохранено в значение времени.Это число интерпретируется как число дней с 1 января 1960 года, когда оно должно интерпретироваться как число секунд с полуночи 1/1/1960 года.
Примечания: Я являюсьиспользуя OLEDB с поставщиком SAS SAS.IOMProvider.Когда я добавляю значение времени, я знаю, что должен конвертировать тики в тики SAS (количество секунд с полуночи 1 января 1960 года) - я просто взял дополнительные вычисления, чтобы их было легче читать.
Обходной путь: Я использую таблицу шаблонов на сервере SAS с правильно отформатированными столбцами.Я просто делаю копию этой таблицы и копирую свои данные в копию шаблона.Это не идеально, но это поможет быстро исправить ситуацию.