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();
}