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
C# UPDATE语句c中的语法错误#_C#_Ms Access - Fatal编程技术网

C# UPDATE语句c中的语法错误#

C# UPDATE语句c中的语法错误#,c#,ms-access,C#,Ms Access,上面显示了我的更新语句。没有编译器错误或任何东西,甚至没有任何警告 string co = "Update Accounts set password = '" + txtNew.Text + "' where Username='" + txtUse.Text + "' and Password = '" + txtPas.Text + "'"; 上面是您的查询,查询包含密码和密码 在set附近,您被赋予password并且在您被赋予password的地方,我强烈怀疑发生这种情况,因为您的

上面显示了我的更新语句。没有编译器错误或任何东西,甚至没有任何警告

string co = "Update Accounts set password = '" + txtNew.Text + "'  where Username='" + txtUse.Text + "' and Password = '" + txtPas.Text + "'";
上面是您的查询,查询包含
密码
密码

set
附近,您被赋予
password
并且在您被赋予
password
的地方,我强烈怀疑发生这种情况,因为您的一个文本框值包含一些转义字符,如
O'Connors
或其他什么。但既然你没有告诉他们价值观,我们就不能确定了

但更重要的是,您应该始终使用。这种字符串连接容易受到攻击,您不必担心转义字符,因为准备好的语句会自动处理它们

也不要将密码存储为纯文本。阅读:


您需要仔细阅读参数化查询,因为您的问题将被SQLi注释轰炸。您的完整错误消息是什么?您会遇到什么错误,在username和password中作为数据的数据可能会破坏sqlstring,编译器不会对这些数据进行评估,因为他不知道您希望将其用作实际逻辑的一部分。这就是为什么您不会收到任何警告甚至错误…区分大小写取决于数据库管理器的设置。因此,基于此设置,
密码
密码
可以相同,也可以不同。但是如果OP的数据库管理器区分大小写,我认为这个查询将返回一些
无效列名..
错误,而不是
语法错误..
。这就是为什么,我认为这里不是这样。
string co = "Update Accounts set password = '" + txtNew.Text + "'  where Username='" + txtUse.Text + "' and Password = '" + txtPas.Text + "'";
using(var con = new OleDbConnection())
using(var cmd = con.CreateCommand())
{
   cmd.CommandText = @"Update Accounts set password = @newpass  
                       where Username = @user and Password = @pass";

   cmd.Parameters.Add("@newpass", OleDbType.VarWChar).Value = txtNew.Text;
   cmd.Parameters.Add("@user", OleDbType.VarWChar).Value = txtUse.Text;
   cmd.Parameters.Add("@pass", OleDbType.VarWChar).Value = txtPas.Text;

   con.Open();
   cmd.ExecuteNonQuery();
}