2013-02-26 35 views
1

我正在使用一个Access数据库,我真的不喜欢这种方式,并且试图使用“contacts”表执行记录更新。该声明是这样写这样......访问更新语句并在.NET中调用所述语句

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

+0

您确定联系人ID存在吗?此外,请包含您的DAL.SendData代码。另外,哪个版本的Access? – 2013-02-26 17:50:43

+0

是的,一切都很好,只是参数的顺序是错误的,因为当使用Access时,参数的名称将被忽略。 – 2013-02-26 18:02:09

回答

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)) 
+0

该死的,我知道了!非常感谢! – 2013-02-26 18:01:25

1

您的更新声明看起来很奇怪。这是一个很长的时间,因为我做访问,但它应该看起来更像是这样的:

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

此外,您访问并不真正关心的参数名称,只要确保他们在同订购。