Я загружаю данные из базы данных MySQL в приложение C#.NET. Данные хранятся в базе данных как DBType.Double, но для использования в моем приложении я привожу к Decimal с помощью Convert.ToDecimal(). Данные представляют собой позиционные данные, используемые при съемке, и их можно использовать для отображения 3D-модели в окне Direct3D.
Когда окно Direct3D и, следовательно, dll Direct3D не загружены, преобразование работает нормально, так что такие значения, как 1769301.6485186936, 5880300.8152837148, хранящиеся в базе данных, загружаются как 1769301.64851869, 5880300.81528371. Однако, если я загрузил модуль Direct3D, то преобразование приводит к преобразованию тех же значений в 1769301.7112576, 5880300.79401984.
Базовый код приведен ниже, где вершина — это класс/структура из 3 десятичных значений, X, Y и Z.
List<vertex> positions = new List<vertex>();
using (MySqlCommand cmd = new MySqlCommand("SELECT x, y, z FROM positionTable;", conn))
{
MySqlDataReader dr = cmd.ExecuteReader();
try
{
while (dr.Read())
{
vertex position = new vertex();
position.X = Convert.ToDecimal(dr[0]);
position.Y = Convert.ToDecimal(dr[1]);
position.Z = Convert.ToDecimal(dr[2]);
positions.Add(position);
}
}
}