我正在尝试构建一个更新按钮,我可以在其中编辑来自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);
}
}
我调试代码,它会执行所有操作,但数据不会更新。我该怎么办?
答案 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"));