我正在寻求一些帮助,这段代码并没有按照书面形式运作。
string upstatus = "UPDATE memberlogin " +
"SET password = " + newpwtxtbox.Text + " " +
"where username = " + usernametxtbox.Text;
OleDbConnection con = new OleDbConnection(connect);
con.Open();
OleDbCommand cmd2 = new OleDbCommand(upstatus, con);
cmd2.ExecuteNonQuery();
MessageBox.Show("updated!");
con.Close();
由于
答案 0 :(得分:1)
您正在使用MS-Access,在这种情况下,PASSWORD
是保留关键字
在它周围使用方括号
string upstatus = "UPDATE memberlogin SET [password]= .....";
此处的一部分,从不使用字符串连接来构建sql命令,但始终是参数化查询。
string upstatus = "UPDATE memberlogin SET password=? where username = ?";
OleDbConnection con = new OleDbConnection(connect);
con.Open();
OleDbCommand cmd2 = new OleDbCommand(upstatus, con);
cmd2.Parameters.AddWithValue("@p1", newpwtxtbox.Text);
cmd2.Parameters.AddWithValue("@p2", usernmaetxtbox.Text );
cmd2.ExecuteNonQuery();
众所周知,字符串连接方法会导致Sql Injection攻击,但它仍然是一种弱类型的代码,因为在密码或用户名文本框中键入的单引号会对您的字符串命令造成严重破坏,从而导致语法无效你的数据库引擎。
答案 1 :(得分:0)
就像Jon Skeet所说,这不是合适的方式,但如果你坚持的话。
string query = "UPDATE memberlogin " +
"SET password = '" + newpwtxtbox.Text + "' " +
"where username = '" + usernmaetxtbox.Text + "'";
using (var cnn = new OleDbConnection(connect))
using (var cmd = new OleDbCommand(query, cnn))
{
cnn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("updated!");
}