OleDB 参数未正确更新

OleDB Parameter not updating properly

con.Open();
com.Connection = con;
String query2 = "update PointCard set Player_User=@a where PC_Pass=@b";
com.CommandText = query2;

com.Parameters.Add(new OleDbParameter("a", txtUser.Text));
com.Parameters.Add(new OleDbParameter("b", txtPass.Text));
MessageBox.Show("Thank you for your continuous support");
com.ExecuteNonQuery();
con.Close();



con.Open();
com.Connection = con;
String query1 = "update PointCard set PC_Status=@x where PC_Pass=@y";
com.CommandText = query1;

com.Parameters.Add(new OleDbParameter("x", txtInactive.Text));
com.Parameters.Add(new OleDbParameter("y", txtPass.Text));
com.ExecuteNonQuery();
MessageBox.Show("PointCard " + txtPass.Text + " has been credited to your account");
con.Close();

我从上一个问题中学到了使用参数化查询,现在又搞糊涂了。

我遇到的问题是,在执行整个过程后,Access table 中的 PC_StatustxtUser.Text 中的值结束。

即使您使用 query1 重新定义 CommandText 属性,您为 query2 添加的参数集合仍然 你命令的一部分。

更改 OleDbCommandCommandText 属性 不会清除或影响它的 OleDbParameterCollection。它们将仍然是该命令的一部分。

只需在添加新参数时清除它们即可;

com.Parameters.Clear();
com.Parameters.Add(new OleDbParameter("x", txtInactive.Text));
com.Parameters.Add(new OleDbParameter("y", txtPass.Text));

或者您可以为第二个查询创建一个新的 SqlCommand 对象,例如;

String query1 = "update PointCard set PC_Status=@x where PC_Pass=@y";
var com = new OleDbCommand();
com.CommandText = query1;
...
...

另外请使用 using statement 自动处理您的连接和命令,而不是手动 Close 方法。