访问更新语句并在.NET中调用所述语句

时间:2013-02-26 17:46:40

标签: .net ms-access sql-update

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

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部分不正确,这里有什么明显的东西吗?

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

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

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

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