0

soy nuevo programando con c# junto con sus demás herramientas. Tengo un proyecto que debo hacer uso de UPDATE, INSERT, DELETE de una base de datos SQL Server local a travéz de Linq. El problema que me genera es: System.NullReferenceException: 'Referencia a objeto no establecida como instancia de un objeto.' El cual ya he buscado problemas similares lo que indican es que se está usando una variable en NULL, pero en mi caso es confuso porque tengo todas las variables que uso inicializadas y aún así no funciona.

En el siguiente código estoy intentando hacer UPDATE a un Product ya existente en la base de datos, hasta ahora mi método si lo agrega a la DB, pero después se cae indicando lo anterior, imagino que tiene que ver con la lista de productos que estoy usando, pero no lo logro resolverlo y ya llevo horas en este problema.

Le doy save para actualizar la información del producto:introducir la descripción de la imagen aquí

Y me genera el error (ignoren los if de comprobaciones): introducir la descripción de la imagen aquí

private void btnSave_Click(object sender, EventArgs e)
    {
        if (!prd.Code.Equals(updCode.Text.Trim()))
        {
            prd.Code = updCode.Text.Trim();
        }
        else if (!prd.DescriptionPrt.Equals(updDescription.Text.Trim()))
        {
            prd.DescriptionPrt = updDescription.Text.Trim();
        }
        else if (prd.Price != Convert.ToDecimal(updPrice.Text.Trim()))
        {
            prd.Price = Convert.ToDecimal(updPrice.Text.Trim());
        }
        else if (prd.Stock != Convert.ToInt32(updStock.Text.Trim()))
        {
            prd.Stock = Convert.ToInt32(updStock.Text.Trim());
        }
        else
        {
            MessageBox.Show("nothing was updated", "Error");
            return;
        }
        parent.isUpdated = true;
        SalesAdminManager.GetInstance().saveChanges();
        DialogResult result = MessageBox.Show("Successfully updated", "Successfully");
        changeUpdating(false);
        isUpdating = false;
    }

El botón Save es el que llama a SalesAdminManager, el encargado de la lógica (lo tengo como SINGLETON): introducir la descripción de la imagen aquí

El método SaveChanges() llama al DAO que ya es el código autogenerado por la herramienta: introducir la descripción de la imagen aquí

 public void saveChanges() {
        DAOSalesAdmin.SaveChanges();
    }

En lo que se genera la herramienta: introducir la descripción de la imagen aquí

Esta es la clase Manager: introducir la descripción de la imagen aquí

public class SalesAdminManager
{
    private SalesAdministrationEntities DAOSalesAdmin = new SalesAdministrationEntities();
    private CustomerList customerList = new CustomerList();
    private ProductList prdList = new ProductList();

    private static SalesAdminManager _INSTANCE = new SalesAdminManager();
    private SalesAdminManager() {
    }

    public static SalesAdminManager GetInstance() {
        return _INSTANCE;
    }

Lo más raro es que en ocaciones si funciona y en tras no, igualmente estoy trabajando con clientes y me da el mismo problema al usar DELETE con ellos. Espero me pueda ayudar, sería de muchísima ayuda.

Por otra parte, los datos obtenidos de la base de datos los estoy almacenando en una List:

 public class ProductList
{
    private List<Product> prdList = new List<Product>();

    public ProductList()
    {
    }
}

Métodos en los que el manager utiliza las listas (SalesAdminManager):

//PRODUCT


    //local
    public Product findProduct(String code)
    {
        if (code == null)
        {
            throw new ArgumentNullException("You must first select a product");
        }

        return prdList.find(code);
    }

    //data base
    public Product findProductInDB(String code)
    {
        if (code == null)
        {
            throw new ArgumentNullException("You must first select a product");
        }

        return DAOSalesAdmin.Products.Find(code);
    }
    public bool insertProduct(Product prd)
    {

        if (findProduct(prd.Code) == null)
        {
            DAOSalesAdmin.Products.Add(prd);
            prdList.add(prd);
            saveChanges();
            return true;
        }
        return false;
    }

    public void deleteProduct(Product prd)
    {
        DAOSalesAdmin.Products.Remove(prd);
        prdList.delete(prd);
        saveChanges();
    }

    public List<Product> createProductList()
    {
        return prdList.createList(DAOSalesAdmin.Products.ToList());
    }

    public ProductList getProductList()
    {
        return prdList;
    }
gbianchi
  • 19,675
  • 11
  • 38
  • 58
  • 2
    Mira [ask] para que tu pregunta sea mejor recibida. También, aprovecha y haz el [tour] para entender mejor cómo funcionamos y de paso obtener tu primera [medalla](https://es.stackoverflow.com/help/badges)! Gracias por tratar de elaborar una buena pregunta! Hay cosas que no me quedan claro.. primero que deberia cerrarte esta pregunta por repetida (y es lo que voy a hacer en unos minutos)... [aca la pregunta](https://es.stackoverflow.com/questions/75999/qu%c3%a9-es-una-nullreferenceexception-y-c%c3%b3mo-solucionarla)... luego, no pongas imagenes,salvo que sea absolutamente necesario – gbianchi May 01 '21 at 23:58
  • y por favor,mira [mcve]... – gbianchi May 01 '21 at 23:58
  • Asegurate de que ningun campo del objeto sea nulo y revisa los campos nulos en tu modelo, seria muy bueno que depuraras el programa, paso a paso para que veas lo que contiene tu objeto, en el momento de lanzar la excepcion – Japv May 02 '21 at 01:21

0 Answers0