C# SQLite, получая реальное значение из БД, генерирует Invalid Cast Exception - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь получить реальное значение из базы данных 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. Это ничего не меняет. У меня нет идей ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...