我正在使用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部分不正确,这里有什么明显的东西吗?
答案 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, ...
此外,您访问并不关心参数名称,只需确保它们的顺序相同。