OleDbConnection UPDATE 语法错误,SQL 有效但不会更新数据库
OleDbConnection UPDATE Syntax Error, SQL work but won't update DataBase
示例代码如下:
其他一切正常但不断出现语法更新错误?
SQL 检查并在外部作为 SQL 查询工作。
public bool changes()
{
OleDbConnection myConnection = GetConnection();
string myQuery = "UPDATE Login SET Pass='" + textBox1.Text + "' WHERE User='" + textBox2.Text + "'";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
try
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
return true;
}
使用参数而不是连接字符串中的值:
https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx
这是一个代码示例,其中包含 using 语句(正如其他人推荐的那样,用于正确处理资源):
using (OleDbConnection conn = new OleDbConnection(ConnString))
{
using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
conn.Open();
cmd.ExecuteNonQuery();
}
}
嗯,这是因为您的 WHERE
部分,如下所示。 User
是 MS Access 中的 reserve word,因此需要使用 []
转义,例如
WHERE [User]='" + textBox2.Text + "'"
此外,您当前的方法容易受到 SQL 注入的攻击。而是按照另一个答案中的建议使用参数化查询。
示例代码如下: 其他一切正常但不断出现语法更新错误? SQL 检查并在外部作为 SQL 查询工作。
public bool changes()
{
OleDbConnection myConnection = GetConnection();
string myQuery = "UPDATE Login SET Pass='" + textBox1.Text + "' WHERE User='" + textBox2.Text + "'";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
try
{
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
return true;
}
使用参数而不是连接字符串中的值:
https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx
这是一个代码示例,其中包含 using 语句(正如其他人推荐的那样,用于正确处理资源):
using (OleDbConnection conn = new OleDbConnection(ConnString))
{
using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
conn.Open();
cmd.ExecuteNonQuery();
}
}
嗯,这是因为您的 WHERE
部分,如下所示。 User
是 MS Access 中的 reserve word,因此需要使用 []
转义,例如
WHERE [User]='" + textBox2.Text + "'"
此外,您当前的方法容易受到 SQL 注入的攻击。而是按照另一个答案中的建议使用参数化查询。