无法在C#中更新Access数据库

时间:2017-03-28 14:38:31

标签: c# ms-access

我正在尝试构建一个更新按钮,我可以在其中编辑来自Textbox的数据。我正在使用Access数据库,我遇到了一些问题,我无法更新。

贝娄是我的代码:

private void cmdUpdate_Click(object sender, EventArgs e)
{
    try
    {
        con = new OleDbConnection(cs.DBConn);
        con.Open();

        string queryUpdate = @"UPDATE tblFixing SET Title=@Title, CodeBefore=@CodeBefore, CodAfter=@CodAfter, Exp=@Exp, Example=@Example, Notes=@Notes WHERE FixID=@FixID";
        cmd = new OleDbCommand(queryUpdate);
        cmd.Connection = con;

        cmd.Parameters.Add(new OleDbParameter("@FixID", OleDbType.WChar, 20, "FixID"));
        cmd.Parameters.Add(new OleDbParameter("@Title", OleDbType.WChar, 255, "Title"));
        cmd.Parameters.Add(new OleDbParameter("@CodeBefore", OleDbType.WChar, 0, "CodeBefore"));
        cmd.Parameters.Add(new OleDbParameter("@CodAfter", OleDbType.WChar, 0, "CodAfter"));
        cmd.Parameters.Add(new OleDbParameter("@Exp", OleDbType.WChar, 0, "Exp"));
        cmd.Parameters.Add(new OleDbParameter("@Example", OleDbType.WChar, 0, "Example"));
        cmd.Parameters.Add(new OleDbParameter("@Notes", OleDbType.WChar, 255, "Notes"));

        cmd.Parameters["@FixID"].Value = cmbID.Text.Trim();
        cmd.Parameters["@Title"].Value = txtTitulo.Text.Trim();
        cmd.Parameters["@CodBefore"].Value = rchCodBefore.Text.Trim();
        cmd.Parameters["@CodAfter"].Value = rchCodAfter.Text.Trim();
        cmd.Parameters["@Exp"].Value = rchExplicacao.Text.Trim();
        cmd.Parameters["@Example"].Value = rchExemplo.Text.Trim();
        cmd.Parameters["@Notes"].Value = rchNotas.Text.Trim();

        cmd.ExecuteNonQuery();
        MessageBox.Show("Successful updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

        con.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error\nDetails: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

我调试代码,它会执行所有操作,但数据不会更新。我该怎么办?

1 个答案:

答案 0 :(得分:2)

OleDB不使用命名参数。它们以索引顺序出现。

你有@FixID参数作为第一个参数添加到集合中,但当你查看sql字符串时,它是最后一个参数字符串。

更改参数顺序:

cmd.Parameters.Add(new OleDbParameter("@Title", OleDbType.WChar, 255, "Title"));
cmd.Parameters.Add(new OleDbParameter("@CodeBefore", OleDbType.WChar, 0, "CodeBefore"));
cmd.Parameters.Add(new OleDbParameter("@CodAfter", OleDbType.WChar, 0, "CodAfter"));
cmd.Parameters.Add(new OleDbParameter("@Exp", OleDbType.WChar, 0, "Exp"));
cmd.Parameters.Add(new OleDbParameter("@Example", OleDbType.WChar, 0, "Example"));
cmd.Parameters.Add(new OleDbParameter("@Notes", OleDbType.WChar, 255, "Notes"));
cmd.Parameters.Add(new OleDbParameter("@FixID", OleDbType.WChar, 20, "FixID"));