1

我正在尝试使用此 LINQ 查询更新我的表

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();
}

然后当我开始运行程序时出现此错误

“未处理 InvalidCastException” “指定的强制转换无效。”

抱歉,我无法发布图片,因为我没有足够的声誉“积分”:(

这是在我的类上传递参数的控件。

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");
        }
    }
4

3 回答 3

1

您尝试存储的值与数据库中列的数据类型之间很可能存在一些数据类型不匹配。这将在数​​字列之一中。

如果prodPriceToUp列使用money数据类型,则映射到decimalLinq2Sql 中的类型。您正在尝试将double输入参数的 强制转换为十进制,这可能会导致此问题。在保存之前尝试转换prodPriceToUp为a 。decimal

于 2013-08-20T10:56:22.040 回答
0

我猜您updateProducttblprod. 请在此处检查您使用的是正确的类型

于 2013-08-20T10:57:01.560 回答
0

这是因为以下其中一项尝试转换为无效类型:

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

检查每个左侧的类型是否与右侧的类型相同。例如,当您尝试将字符串保存到该属性时,请确保“tblprod.product_name”是一个字符串属性。

也有可能在您的 LINQ 查询中,where 子句可能存在此问题,请确保“prod.product_id”是一个整数,而不是其他类似 long 或 short 的东西。

如果这些都正常并且您仍然收到异常,那么您需要告诉使用哪一行抛出异常,并提供使用 tblprod 结构的详细信息;

于 2013-08-20T10:58:37.500 回答