简体   繁体   中英

c# updating table using LINQ to SQL?

I'm trying to update my table with this LINQ query

public void updateProduct(
    int selectedIDToUpdate, 
    string prodNAMEToUp, 
    double prodPriceToUp, 
    string prodTYPEToUp, 
    int prodMANUToUp, 
    int prodCODEToUp)
{
     DataClassesLINQEPOSDataContext dcld = new DataClassesLINQEPOSDataContext();
     TBLPRODUCT tblprod = (from prod in dcld.TBLPRODUCTs
                           where prod.product_id == selectedIDToUpdate
                           select prod).First();
     tblprod.product_name = prodNAMEToUp;
     tblprod.product_price = prodPriceToUp;
     tblprod.product_type = prodTYPEToUp;
     tblprod.product_manufacturer = prodMANUToUp;
     tblprod.product_code = prodCODEToUp;
     dcld.SubmitChanges();
}

and then when I start to run the program I have this error

"InvalidCastException was unhandled" "Specified cast is not valid."

Sorry I cant post image because I dont have enough reputation "points" :(

this is the control to pass the parameter on my class.

private void btnSaveToUpdate_Click(object sender, EventArgs e)
    {
        if (txtNameToUpdate.Text != "" || 
        txtPriceToUpdate.Text != "" || 
        txtTypeToUpdate.Text != "" || 
        txtCodeToUpdate.Text != "")
        {
            Connection_Products update = new Connection_Products();
            int selctedID = selectedIDToUpdate;
            string prodNAMEToUp = txtNameToUpdate.Text;
            double prodPriceToUp = double.Parse(txtPriceToUpdate.Text);
            string prodTYPEToUp = txtTypeToUpdate.Text;
            int prodMANUToUp = Convert.ToInt32(cmbManufacturerToUpdate.SelectedValue);
            int prodCODEToUp = Convert.ToInt32(txtCodeToUpdate.Text);
            update.updateProduct(selctedID, prodNAMEToUp, prodPriceToUp, 
            prodTYPEToUp, prodMANUToUp, prodCODEToUp);
        }
        else
        {
            MessageBox.Show("Error");
        }
    }

You most likely have some datatype mismatch between the values that you are trying to store and the data types of the columns in the database. This would be in one of the numeric columns.

If the prodPriceToUp column uses the money data type, this maps to a decimal type in Linq2Sql. You are trying to cast the double for the input parameter to decimal, which may be causing this issue. Try converting prodPriceToUp to a decimal before saving it.

I guess you are missing something in type mapping between updateProduct params and properties in tblprod . Please check here you are using correct types

This is because one of the following is trying to cast into an invalid type:

 tblprod.product_name = prodNAMEToUp;
 tblprod.product_price = prodPriceToUp;
 tblprod.product_type = prodTYPEToUp;
 tblprod.product_manufacturer = prodMANUToUp;
 tblprod.product_code = prodCODEToUp;

Check for each of the these that the type of the left side is the same as the type of the right side. for example ensure that "tblprod.product_name" is a string property as you are trying to save a string to that property.

It is also possible that in your LINQ query, the where clause may have this problem, ensure that "prod.product_id" is an integer and not something else like a long or a short.

if these are all ok and you are still getting the exception then you will need to tell use what line is throwing the exception, and give use the details of the structure of tblprod;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM