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就像一个受限制的关键字,我必须在[]中覆盖它才能工作。

c# oledb update

您的代码存在严重问题。它容易受到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条件的记录,并且没有要更新的内容。