Ошибка вставки данных из многих списков возврата метода в базу данных в c # - PullRequest
0 голосов
/ 27 февраля 2019

Мне нужна помощь здесь с частью моего кода, вот она:

У меня есть 6 методов, как вы можете видеть ниже, которые анализируют входящие данные, а затем возвращают их в виде списка, поэтому моя проблема заключается в отправкеВ этом списке данных для моей таблицы базы данных SerialNumber каждый метод списков представляет собой отдельное поле, которое заполнит столбец базы данных.

Так, например, материал анализа будет заполнять столбец базы данных materiallookupcode и то же самое для остальных.

Вот изображение таблицы базы данных enter image description here

Вот код всех 5 методов, которые считывают данные, а затем возвращают их, и мне нужны эти данныеотправить в мою базу данных

private List<string> ParseMaterial()
        {
            var materialList = new List<string>();

            foreach (var material in _connection.GetBarcodeList())
            {
                materialList.Add(material.Substring(10, 5));
            }

            return materialList;
        }

        private List<string> ParseLot()
        {
            var lotList = new List<string>();
            var establishmentList = GetEstablishmentCode();

            foreach (var lot in _connection.GetBarcodeList())
            {
                if (establishmentList.Contains("038"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.LoganSport038Property);
                }
                if (establishmentList.Contains("072"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.LouisaCounty072Property);
                }
                if (establishmentList.Contains("086"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.Madison086Property);
                }
                if (establishmentList.Contains("089"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.Perry089Property);
                }
                if (establishmentList.Contains("069"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.StormLake069Property);
                }
                if (establishmentList.Contains("088"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.Waterloo088Property);
                }
                if (establishmentList.Contains("265"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.GoodLetsVille265Property);
                }
                if (establishmentList.Contains("087"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.CouncilBluffs087Property);
                }
                if (establishmentList.Contains("064"))
                {
                    lotList.Add(lot.Substring(28, 6) + _lotEstablishment.Sherman064Property);
                }

            }

            return lotList;
        }

        private List<string> ParseSerialNumber()
        {
            var serialNumberList = new List<string>();

            foreach (var serialNumber in _connection.GetBarcodeList())
            {
                serialNumberList.Add(serialNumber.Substring(36, 10));
            }

            return serialNumberList;
        }

        public List<string> ParseNetWeight()
        {
            var netWeightList = new List<string>();


            foreach (var netWeight in _connection.GetBarcodeList())
            {            
                netWeightList.Add(netWeight.Substring(22, 4));
            }

            return netWeightList;
        }

        public List<string> ParseGrossWeight()
        {
            var grossWeightList = new List<string>();

            foreach (var grossWeight in _connection.GetBarcodeList())
            {
                grossWeightList.Add(grossWeight.Substring(22, 4));
            }

            return grossWeightList;
        }

        public List<string> FullBarcode()
        {
            var receiveFullBarcodeList = new List<string>();

            foreach (var fullBarcode in _connection.GetBarcodeList())
            {
                receiveFullBarcodeList.Add(fullBarcode);
            }

            return receiveFullBarcodeList;
        }

        public List<string> GetEstablishmentCode()
        {
            var establishmentList = new List<string>();

            foreach (var establishmentCode in _connection.GetBarcodeList())
            {
                establishmentList.Add(establishmentCode.Substring(36, 3));
            }

            return establishmentList;
        }

Проблема заключается в том, что кнопка при нажатии будет читать все 5 методов и отправлять ее в базу данных, я уверен, что часть, где я делаю список переменных в строку ичасть разделителя неверна, поэтому мне нужно, как правильно добавить эти списки в каждый столбец базы данных

    private async void btn_SubmitData_Click(object sender, EventArgs e)
              {
                 // parse list methodss
            var materialList = ParseMaterial();
            var lotList = ParseLot();
            var netWeightList = ParseNetWeight();
            var grossWeightList = ParseGrossWeight();
            var serialNumberList = ParseSerialNumber();
            var fullSerialNumberList = FullBarcode();

            var material = "";
            var lot = "";
            var net = "";
            var gross = "";
            var serial = "";
            var fullSerial = "";

            var currentUser = _currentUser.GetCurrentUsernameOnApp();
            var licensePlateId = GetLicensePlateIds();

            for (var i = 0; i < _connection.GetBarcodeList().Count; i++)
            {
                 material = materialList[i];
                 lot = lotList[i];
                 net = netWeightList[i];
                 gross = grossWeightList[i];
                 serial = serialNumberList[i];
                 fullSerial = fullSerialNumberList[i];
            }

            // database table and columns
            var serialNumbersInsert = new List<SerialNumber>
            {
                new SerialNumber
                {
                    SerialNumberLookupCode = serial,
                    NetWeight = Convert.ToDecimal(net) / 100,
                    GrossWeight = Convert.ToDecimal(gross) / 100,
                    LotLookupCode = lot,
                    MaterialLookupCode = material,
                    FullSerialNumberLookupCode = fullSerial,
                    CreatedSysDateTime = DateTime.Now,
                    ModifiedSysDateTime = DateTime.Now,
                    CreatedSysUser = currentUser,
                    ModifiedSysUser = currentUser,
                    LicensePlateId = licensePlateId
                }
            };

            // insert to the database
            foreach (var list in serialNumbersInsert)
            {
                _unitOfWork.SerialNumbers.Add(list);
            }
            await _unitOfWork.Complete();
}

Вот класс домена SerialNumber, которыйпредставляет таблицу базы данных, используя код первой миграции

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BarcodeReceivingApp.Core.Domain
{
    // domain class, represents a database table in sql server using code 
    // first migration
    public class SerialNumber
    {
        public int Id { get; set; }
        public int LicensePlateId { get; set; }
        public string FullSerialNumberLookupCode { get; set; }
        public string SerialNumberLookupCode { get; set; }
        public decimal NetWeight { get; set; }
        public decimal GrossWeight { get; set; }
        public string LotLookupCode { get; set; }
        public string MaterialLookupCode { get; set; }
        public DateTime CreatedSysDateTime { get; set; }
        public DateTime ModifiedSysDateTime { get; set; }
        public string CreatedSysUser { get; set; }
        public string ModifiedSysUser { get; set; }

    }
}

Я ищу другие места, но пока не могу найти хорошего решения, поэтому любая помощь приветствуется.

1 Ответ

0 голосов
/ 01 марта 2019

Мне удалось решить мой вопрос. Я назначил все списки в цикле, а затем назначил их каждому столбцу в базе данных.

Но я все еще ищу лучший и более чистыйпуть к этому решению

private async void btn_SubmitData_Click(object sender, EventArgs e)
    {
        // parse list methods - represents each field of the database column
        var materialList = ParseMaterial();
        var lotList = ParseLot();
        var netWeightList = ParseNetWeight();
        var grossWeightList = ParseGrossWeight();
        var serialNumberList = ParseSerialNumber();
        var fullSerialNumberList = FullBarcode();
        var currentUser = _currentUser.GetCurrentUsernameOnApp();
        var licensePlateId = GetLicensePlateIds();


        for (var i = 0; i < _connection.GetBarcodeList().Count; i++)
        {
             var serialNumbersInsert = new List<SerialNumber>
             {
                 new SerialNumber
                 {
                     SerialNumberLookupCode = materialList[i],
                     NetWeight = Convert.ToDecimal(netWeightList[i]) / 100,
                     GrossWeight = Convert.ToDecimal(grossWeightList[i]) / 100,
                     LotLookupCode = lotList[i],
                     MaterialLookupCode = materialList[i],
                     FullSerialNumberLookupCode = fullSerialNumberList[i],
                     CreatedSysDateTime = DateTime.Now,
                     ModifiedSysDateTime = DateTime.Now,
                     CreatedSysUser = currentUser,
                     ModifiedSysUser = currentUser,
                     LicensePlateId = licensePlateId
                 }
             };

             foreach (var list in serialNumbersInsert)
             {
                 _unitOfWork.SerialNumbers.Add(list);
             }
             await _unitOfWork.Complete();
        }

    }
...