Я пытаюсь получить реальное значение из базы данных SQLite, используя C#. Все работает хорошо, за исключением реальных ценностей.
Я использую следующий код для получения данных из базы данных
// Building query...
cmd.CommandText = "SELECT * " +
"FROM ProductsPrice p " +
"WHERE p.ProductId = @ProductId " +
"ORDER BY Date DESC " +
"LIMIT 1";
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@ProductId", ProductId);
// Execute query
using (SQLiteConnection conn = DatabaseService.getDbConnection())
using (cmd.Connection = conn)
{
//Open Connection
conn.Open();
using (SQLiteDataReader dr = cmd.ExecuteReader())
while (dr.Read())
{
//var x = dr.GetString(dr.GetOrdinal("NetPrice"));
//var y = dr["GrossPrice"];
//var x = dr.GetOrdinal("GrossPrice").GetType();
price.Id = dr.GetInt32(dr.GetOrdinal("Id"));
price.NetPrice = dr.GetDouble(dr.GetOrdinal("NetPrice"));
price.GrossPrice = dr.GetDouble(dr.GetOrdinal("GrossPrice"));
price.VAT = dr.GetDouble(dr.GetOrdinal("Vat"));
price.AddedDate = dr.GetDateTime(dr.GetOrdinal("Date"));
}
}
Цена объекта выглядит следующим образом:
public int Id { get; set; }
public double NetPrice { get; set; }
public double GrossPrice { get; set; }
public double VAT { get; set; }
public DateTime AddedDate { get; set; }
Столбцы базы данных выглядят следующим образом:
ID = INTEGER
NetPrice = REAL
GrossPrice = REAL
Vat = REAL
Date = datetime
Когда я получаю NetPrice, это работает, потому что значение равно 2. Но когда я получаю GrossPrice, я получаю исключение Invalid Cast, потому что это значение равно 2,42. Что я здесь не так делаю?
Если я проверяю GetType () GrossPrice, это Int32. Но это невозможно при значении 2,42. Если я использую price.GrossPrice = Convert.ToDouble(dr["GrossPrice"])
, я получаю результат 2 (без .42). Если я изменю тип столбца SQLite DB на Double или Float. Это ничего не меняет. У меня нет идей ...