1

我正在使用一个我真的不喜欢顺便说一句的 Access 数据库,并且正在尝试使用“联系人”表对记录执行更新。声明是这样写的……

UPDATE contacts SET FirstName = [c_FirstName], LastName = [c_LastName], Title = [c_Title], Email = [c_Email], IncludeSection4 = [c_IncludeSection4] WHERE (((ContactID)=[c_ContactID]));

现在.NET 部分是这样的......

Public Shared Function Update(ByVal contact As IContact) As Boolean
        Dim parameterList As New List(Of DataParameter)
        parameterList.Add(New DataParameter("c_ContactID", contact.ContactID, ParameterDirection.Input, OleDbType.Integer))
        parameterList.Add(New DataParameter("c_FirstName", contact.FirstName, ParameterDirection.Input, OleDbType.VarChar))
        parameterList.Add(New DataParameter("c_LastName", contact.LastName, ParameterDirection.Input, OleDbType.VarChar))
        parameterList.Add(New DataParameter("c_Title", contact.Title, ParameterDirection.Input, OleDbType.VarChar))
        parameterList.Add(New DataParameter("c_Email", contact.Email, ParameterDirection.Input, OleDbType.VarChar))
        parameterList.Add(New DataParameter("c_IncludeSection4", contact.IncludeSection4, ParameterDirection.Input, OleDbType.Boolean))
        If DAL.SendData("UpdateContact", parameterList) Then
            Return True
        End If
        Return False
End Function

由于某种原因,这不会更新并且总是返回 false。cmd.ExecuteNonQuery 总是返回 0.... 我在想它的 Access 部分不正确,这里有什么明显的吗?

4

2 回答 2

1

带有 Access 的 OleDb 会忽略参数名称。按照它们在UPDATE语句中出现的顺序提供参数。

    parameterList.Add(New DataParameter("c_FirstName", contact.FirstName, ParameterDirection.Input, OleDbType.VarChar))
    parameterList.Add(New DataParameter("c_LastName", contact.LastName, ParameterDirection.Input, OleDbType.VarChar))
    parameterList.Add(New DataParameter("c_Title", contact.Title, ParameterDirection.Input, OleDbType.VarChar))
    parameterList.Add(New DataParameter("c_Email", contact.Email, ParameterDirection.Input, OleDbType.VarChar))
    parameterList.Add(New DataParameter("c_IncludeSection4", contact.IncludeSection4, ParameterDirection.Input, OleDbType.Boolean))
    parameterList.Add(New DataParameter("c_ContactID", contact.ContactID, ParameterDirection.Input, OleDbType.Integer))
于 2013-02-26T17:58:07.853 回答
1

您的更新声明看起来很奇怪。自从我完成访问以来已经很长时间了,但它应该看起来更像这样:

UPDATE [contacts] SET [FirstName] = @c_FirstName, [LastName] = @c_LastName, ...

此外,您的 Access 并不真正关心参数名称,只需确保它们的顺序相同。

于 2013-02-26T17:59:47.207 回答