我正在尝试为我的程序添加更改密码功能,但它会不断提取错误。这是你点击保存时应该运行的代码:
private void button3_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = (@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Users\User\Desktop\esoft\gym\gym\bin\Debug\Clients.accdb");
OleDbDataAdapter da = new OleDbDataAdapter(" SELECT COUNT(*) FROM login WHERE username='"+textBox1.Text+ "' AND password='" + textBox2.Text + "'",con);
DataTable dt = new DataTable();
con.Open();
errorProvider1.Clear();
if (dt.Rows[0][0].ToString() == "1")
{
if (textBox3.Text == textBox4.Text)
{
OleDbDataAdapter sda = new OleDbDataAdapter("UPDATE login WHERE username ='" + textBox1.Text + "', password='" + textBox2.Text + "' (password ='" + textBox3.Text + "')", con);
sda.Fill(dt);
MessageBox.Show("password successfully changed", "success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
errorProvider1.SetError(textBox3, "passwords dont match");
errorProvider1.SetError(textBox4, "passwords dont match");
}
}
else
{
errorProvider1.SetError(textBox1, "wrong username");
errorProvider1.SetError(textBox2, "wrong pasword");
}
con.Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
现在的主要错误是,当试图保存时,它会引发一个错误,指出在位置3没有找到任何行。当更改为[1] [5]时,它会为该位置拉出相同的错误。 / p>
我使用您的建议更改了代码,但仍然收到相同的错误。
private void button3_Click(object sender, EventArgs e)
{
using (OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Users\User\Desktop\esoft\gym\gym\bin\Debug\Clients.accdb"))
{
OleDbDataAdapter da = new OleDbDataAdapter(" ExecuteScalar FROM login WHERE username='" + textBox1.Text + "' AND password='" + textBox2.Text + "'", con);
DataTable dt = new DataTable();
con.Open();
errorProvider1.Clear();
if (dt.Rows[0][0].ToString() == "1")
{
if (textBox3.Text == textBox4.Text)
{
// OleDbDataAdapter sda = new OleDbDataAdapter("UPDATE login SET password ='" + textBox3.Text + "' WHERE username ='" +textBox2.Text+"'");
OleDbCommand com = new OleDbCommand("UPDATE login SET password = '" + textBox3.Text + "' WHERE username = '" +textBox2.Text+"'",con);
com.ExecuteNonQuery();
// sda.Fill(dt);
MessageBox.Show("password successfully changed", "success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
errorProvider1.SetError(textBox3, "passwords dont match");
errorProvider1.SetError(textBox4, "passwords dont match");
}
答案 0 :(得分:1)
你做错了一些事情;
ExecuteScalar
代表您的SELECT COUNT(*)
语句,这正是这个内容。 dt
。ExecuteNonQuery
作为UPDATE
声明。 DataAdapter
用于返回一些数据。SET
声明中使用UPDATE
。AND
条件使用OR
或WHERE
,而不是,
。using
语句自动处理您的连接和命令,而不是手动调用Close
方法。[password]
。但作为一种更好的方法,将其更改为非 - 保留的单词,即使它是。答案 1 :(得分:1)
这是因为您错过了SET
个关键字。您的查询
UPDATE login WHERE username ='" +
应该是
UPDATE login SET columnname = value WHERE username ='" +
根据您发布的代码,它应该是
UPDATE login SET password ='" + textBox3.Text + "' WHERE username ='" +
尽管如此,使用参数化查询并且不要像现在这样做那样连接用户输入,否则你已经打开了SQL注入的大门。