Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OleDB参数未正确更新_C#_Ms Access_Oledbcommand - Fatal编程技术网

C# OleDB参数未正确更新

C# OleDB参数未正确更新,c#,ms-access,oledbcommand,C#,Ms Access,Oledbcommand,我从前面的问题中学到了如何使用参数化查询,现在我又感到困惑了 我遇到的问题是,在执行整个操作之后,Access表中的PC_Status以txtexser.Text中的值结束。即使使用query1重新定义CommandText属性,为query2添加的参数集合仍然是命令的一部分 更改OleDbCommand的CommandText属性不会清除或影响它的功能。他们仍将是该命令的一部分 只需在添加新参数时清除它们,如 con.Open(); com.Connection = con; String q

我从前面的问题中学到了如何使用参数化查询,现在我又感到困惑了


我遇到的问题是,在执行整个操作之后,Access表中的
PC_Status
txtexser.Text
中的值结束。

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

更改
OleDbCommand
CommandText
属性不会清除或影响它的功能。他们仍将是该命令的一部分

只需在添加新参数时清除它们,如

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();
或者,您可以为第二个查询创建一个新的
SqlCommand
对象,如:

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

另外,请使用自动处理连接和命令,而不是手动关闭方法。

可能基础数据提供程序正在使用位置参数?因为您正在为另一个命令重用
com
变量,所以前面的参数仍然存在于参数集合中。此外,无需关闭和重新打开连接,只需在执行第一个命令之前打开连接,然后在执行第二个命令之后关闭连接。@LasseV.Karlsen非常感谢!我会记住的!
String query1 = "update PointCard set PC_Status=@x where PC_Pass=@y";
var com = new OleDbCommand();
com.CommandText = query1;
...
...