繁体   English   中英

C#oledb更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM