使用C#OleDbConnection和Command NOT工作的Microsoft Access UPDATE命令

时间:2011-01-03 23:25:29

标签: ms-access ado.net c#-4.0 oledb

我很遗憾地使用Microsoft Access,因为它有更高的力量并试图更新记录而没有运气。

这是代码:

private void UpdateContact(Contact contact)
{
    using (OleDbConnection db = new OleDbConnection(_connString))
    {
        string query = "UPDATE [Contact] SET [FirstName] = @FirstName, [LastName] = @LastName, [MobileNumber] = @MobileNumber WHERE [Id] = @Id";

        OleDbCommand cmd = new OleDbCommand(query, db) { CommandType = CommandType.Text };
        cmd.Parameters.AddWithValue("@Id", contact.Id);
        cmd.Parameters.AddWithValue("@FirstName", contact.FirstName);
        cmd.Parameters.AddWithValue("@LastName", contact.LastName);
        cmd.Parameters.AddWithValue("@MobileNumber", contact.MobileNumber);

        db.Open();

        int rowsAffected = cmd.ExecuteNonQuery();

        db.Close();
    }
}

一切似乎都很好,没有例外,但也没有受影响的行。它总是返回0。 我在调试时检查了它的值,并且它应该保持正确的值。 使用MS Access 2007创建的访问文件,但其类型为2002-2003。

知道我做错了什么吗?

2 个答案:

答案 0 :(得分:5)

尝试

string query = "UPDATE [Contact] SET [FirstName] = ? [LastName] = ?, [MobileNumber] = ? WHERE [Id] = ?"

按语句的顺序添加参数,即firstname ... id

答案 1 :(得分:3)

你需要吗?对于占位符,参数必须按其出现的顺序添加:http://msdn.microsoft.com/en-us/library/dw70f090.aspx