简体   繁体   English

谁能告诉我这个更新声明有什么问题? 访问数据库

[英]Can anyone tell me what's wrong with this Update Statement? Access Mdb

private void btnUpdate_Click(object sender, EventArgs e)
{
    try
    {
            using (OleDbConnection conn = new OleDbConnection(Con))
            {
                conn.Open();

                OleDbCommand cmd = new OleDbCommand("UPDATE ACTB SET FirstName = @FirstName, LastName = @LastName, GrossIncome = @GrossIncome, LessTNT = @LessTNT,  TaxableIncomeCE = @TCI, " +
                                                                    "TaxableIncomePE = @ADDTI, GrossTaxableIncome = @GTI, LessTE = @LessTE, LessPPH = @LessPPH, NetTax = @LessNTI," +
                                                                    "TaxDue = @TD, HeldTaxCE = @TWCE, HeldTaxPE = @TWPE, TotalTax = @TATW WHERE ID = @ID", conn);

                // OleDbCommand cmd = new OleDbCommand("UPDATE ACTB SET (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) = " +
                // "VALUES(@FirstName, @LastName, @GrossIncome, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)", conn);
                cmd.Parameters.AddWithValue("@ID", txtID.Text);
                cmd.Parameters.AddWithValue("@FirstName", txtFirst.Text);
                cmd.Parameters.AddWithValue("@LastName", txtLast.Text);
                cmd.Parameters.AddWithValue("@GrossIncome", Convert.ToDouble(txtGross.Text));
                cmd.Parameters.AddWithValue("@LessTNT", Convert.ToDouble(txtLessTNT.Text));
                cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(txtTCI.Text));
                cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(txtADDTI.Text));
                cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(txtGTI.Text));
                cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(txtLessTE.Text));
                cmd.Parameters.AddWithValue("@LessPPH", Convert.ToDouble(txtLessPPH.Text));
                cmd.Parameters.AddWithValue("@LessNTI", Convert.ToDouble(txtLessNTI.Text));
                cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(txtTD.Text));
                cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(txtTWCE.Text));
                cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(txtTWPE.Text));
                cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(txtTATW.Text));
                cmd.ExecuteNonQuery();
                conn.Close();
            }
    }
    catch (OleDbException ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        lblSuccess.Text = "Successfully updated the records!";
        Restore();
    }
}

Been looking for something wrong with this but I can't find it.一直在寻找这个问题,但我找不到它。 It doesn't update the table which Restore() handles btw.顺便说一句,它不会更新Restore()处理的表。 No errors are thrown.不会抛出任何错误。

Though it did have a "Connection string not properly initialized" and error in update statement errors earlier.虽然它确实有一个“连接字符串未正确初始化”和更新语句错误中的错误。

OleDbCommand doesn't have the concept of Name value parameters. OleDbCommand没有 Name 值参数的概念。 So you MUST define them in the same order as in the query.因此,您必须按照与查询中相同的顺序定义它们。

So first parameter should be所以第一个参数应该是

cmd.Parameters.AddWithValue("@FirstName", txtFirst.Text);
cmd.Parameters.AddWithValue("@LastName", txtLast.Text);
//and so on ...

//last one
cmd.Parameters.AddWithValue("@ID", txtID.Text);

Also you can use @ to write strings on multiple lines.您也可以使用@在多行上写入字符串。

PS There is no need to Close() the connection when you use using, this is done automatically by Dispose() PS 使用 using 时不需要 Close() 连接,这是由Dispose()自动完成的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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