Wyjątek rzucany przy pobieraniu danych z bazy danych

0

Cześć, mam problem przy pobieraniu z bazy danych. Przygotowałem model danych wraz z pobieraniem i zapisywaniem, wygląda następująco:

using AppCore;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;

namespace MagazynierWeb.Models
{
    public class ProductsModel
    {
        public string ProductCode { get; set; }
        public string ProductName { get; set; }
        public string ProductGroup { get; set; }
        public string InventoryNumber { get; set; }
        public string PKWIUCode { get; set; }
        public float Level { get; set; }
        public float MinLevel { get; set; }
        public float MaxLevel { get; set; }
        public float Wight { get; set; }
        public string Unit { get; set; }
        public string Package { get; set; }
        public int PiecesInPackage { get; set; }

        public static List<ProductsModel> GetProducts = SqlOperations.GetData("dic.t_products").Tables[0].AsEnumerable().Select(x => new ProductsModel()
        {
            ProductCode = x.Field<string>("ProductCode"),
            ProductName = x.Field<string>("ProductName"),
            ProductGroup = x.Field<string>("ProductGroup"),
            InventoryNumber = x.Field<string>("InventoryNumber"),
            PKWIUCode = x.Field<string>("PKWIUCode"),
            Level = x.Field<float>("Level"),
            MinLevel = x.Field<float>("MinLevel"),
            MaxLevel = x.Field<float>("MaxLevel"),
            Wight = x.Field<float>("Wight"),
            Unit = x.Field<string>("Unit"),
            Package = x.Field<string>("Package"),
            PiecesInPackage = x.Field<int>("PiecesInPackage"),
        }).ToList();

        public static void SaveProduct(ProductsModel model)
        {
            var test = model.PKWIUCode.Split(" ")[0];
            SqlOperations.Exec("dic.p_products", new SqlParameter[]
                {
                    new SqlParameter("@ProductCode", model.ProductCode),
                    new SqlParameter("@ProductName", model.ProductName),
                    new SqlParameter("@ProductGroup", model.ProductGroup),
                    new SqlParameter("@Inventorynumber", model.InventoryNumber),
                    new SqlParameter("@PKWiUCode", model.PKWIUCode.Split(" ")[0]),
                    new SqlParameter("@Level", model.Level),
                    new SqlParameter("@MinLevel", model.MinLevel),
                    new SqlParameter("@MaxLevel", model.MaxLevel),
                    new SqlParameter("@Wight", model.Wight),
                    new SqlParameter("@Unit", model.Unit),
                    new SqlParameter("@Package", model.Package),
                    new SqlParameter("@PiecesInPackage", model.PiecesInPackage)
                });
        }
    }
}

W sytuacji, w której chcę pobrać dane z bazy danych wykorzystując: GetProducts:

screenshot-20200919205055.png
Prześledziłem ścieżkę i wyjątek pojawia się w tym fragmencie kodu (5 wiersz):

        public static DataSet GetData(string tableName)
        {
            DataSet result = new DataSet();

            using (SqlConnection conn = SqlConnector.SqlConnection)
            {
                using (SqlDataAdapter adapter = new SqlDataAdapter(string.Format("select * from {0}", tableName), conn))
                {
                    adapter.Fill(result);
                }
            }

                return result;
        }

Pozostałem pobieranie danych z bazy danych działa, a tylko w tym przypadku pojawia się problem z pobraniem danych. Czytając wyjątek można znaleźć, że problem występuje z kastowaniem, jednak w modelu jaki i tabeli w bazie danych występują te same typy danych

2

Wiadomość mówi jak byk, że nie możesz rzutować bazodanowego float z sql server na C# float (single), tylko musisz rzutować to na double.

Pozamieniaj

 x.Field<float>

na

 x.Field<double>

tam gdzie kolumny w tabeli masz tybu float.

Tutaj masz tabele mapowania typów https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings

Typ float mapujesz z sql server na c# double.
Na c# float możesz mapować typ real z sql servera.

1 użytkowników online, w tym zalogowanych: 0, gości: 1