У меня есть большая программа регистрации и ввода данных, которая получает объект DataTable
с 1 DataRow
. В DataTable
есть случайное количество столбцов со случайным именем и типом столбца, поэтому я не могу иметь класс для каждого. Используя эти DataColumn
, я получаю DataType
и строю BsonDocument
с нуля.
Вот небольшой пример
public void ParseData(DataTable table)
{
// create the document
var document = new BsonDocument();
// get the only row in the table
var row = table.Rows[0];
// for each column we add the property
foreach (DataColumn column in table.Columns)
{
// create an empty value
BsonValue value = null;
// current column value
var columnValue = row[column.ColumnName];
// set the value based on the datatype
if (column.DataType == typeof(string)) value = new BsonString(columnValue.ToString());
else if (column.DataType == typeof(int)) value = new BsonInt32(Convert.ToInt32(columnValue));
else if (column.DataType == typeof(float)) value = new BsonDouble(Convert.ToDouble(columnValue));
else if (column.DataType == typeof(double)) value = new BsonDouble(Convert.ToDouble(columnValue));
else if (column.DataType == typeof(bool)) value = new BsonBoolean(Convert.ToBoolean(columnValue));
else if (column.DataType == typeof(DateTime)) value = new BsonDateTime(Convert.ToDateTime(columnValue));
// add the element
document.Add(new BsonElement(column.ColumnName, value));
}
// insert the document in the generic collection
InsertDocument(document);
}
Как видите, это довольно просто. Я удалил много типов из списка, так как у нас есть много настраиваемых типов, которые могут пройти, поэтому я просто оставил базовые c. Проблема в том, что я не могу понять, как заставить BsonDateTime
сохранять как местное время в коллекции. При выполнении фильтров с устаревшими приложениями он не работает. Мне нужно, чтобы они были сохранены как местное время. Раньше это никогда не было проблемой, но из-за устаревших приложений начала 90-х, которые все еще нуждаются в поддержке, мне нужно кое-что выяснить.
Мне также нужно перезагрузить их по местному времени. Если бы я мог, я бы сохранил их как строку, но я не могу, потому что, поскольку все столбцы случайны, я не знаю при загрузке, действительно ли указано c BsonString
string
или DateTime
. Для перезагрузки я не должен перезагружать действительно по местному времени. Я должен перезагрузить точное значение в базе данных. Я контролирую только создание документа. Но при чтении я контролирую только некоторые из них, которые будут читать из C#, Java и C ++. Остальные - это устаревшие приложения, которых компаний больше не существует.
Я попытался просто изменить каждую дату, приходящую в систему, чтобы учесть UT C и изменить дату на при сохранении как UT C это сохраненное свойство и фильтры из устаревших приложений по-прежнему работают, но все приложения. NET, Java и C ++ загружают неправильное значение, а не записанное значение.
Есть ли способ просто отключить UT C в определенной коллекции c или базе данных в MongoDB напрямую, как вы можете на сервере SQL?