[英]c# oledb update
我正在尝试通过ac#winform接口将单个值更新到我的Access .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为“ user”。
更新:发现错误! 事实证明,密码就像一个受限制的关键字,我不得不在[]中覆盖它,然后它才能起作用。
您的代码存在严重问题。 它容易受到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
条件匹配的记录,也没有任何要更新的记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.