c# oledb update
本文关键字:update oledb | 更新日期: 2023-09-27 18:12:17
我试图通过c# winform接口将单个值更新到我的访问。accdb数据库。我的SQL语句是:
updateString("UPDATE Password_Table SET Password = '" + confirmnewpasswordTextBox.Text + "' WHERE Password_ID = 'user'");
字段应该是正确的,但每当我执行updateString函数时,它只返回零。我可以知道我在下面的例子中做错了什么吗?
public static bool updateString(string SQL)
{
using (var connection = new OleDbConnection(connectionString))
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandText = SQL;
command.CommandType = CommandType.Text;
try
{
return command.ExecuteNonQuery();
}
catch
{
return -1;//for error
}
}
}
谢谢! !
更新: System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.
嗯,我仍然无法找出什么是错的,我的表是Password_Table,我正试图更新一个名为Password的列,其中Password_ID是"用户"。
update:发现错误!原来Password就像一个受限制的关键字,我必须在[]中覆盖它才能工作。
您的代码存在严重问题。它容易受到SQL注入的攻击。您应该始终使用参数化查询来避免这种情况。例如:
public static string UpdatePassword(string user, string password)
{
using (var connection = new OleDbConnection(connectionString))
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandText = "UPDATE Password_Table SET Password = @pwd WHERE Password_ID = @user";
command.Parameters.AddWithValue("@pwd", password);
command.Parameters.AddWithValue("@user", user);
try
{
return command.ExecuteNonQuery();
}
catch
{
return -1;//for error
}
}
}
然后像这样调用:
int rowsAffetected = UpdatePassword("user", confirmnewpasswordTextBox.Text);
现在,如果返回0,则表示数据库中没有符合Password_ID = user
条件的记录,并且没有要更新的内容。