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

あなたの更新ステートメントは奇妙に見えます。アクセスしてから長い時間が経ちましたが、次のようになります。

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

また、Access はパラメーター名をあまり気にしません。同じ順序になっていることを確認してください。

于 2013-02-26T17:59:47.207 に答える
1

OleDb with Access はパラメーター名を無視します。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 に答える