Lennert Hofman
Lennert Hofman

Reputation: 595

(asp.net) my sql-code (update statement) works in database but not in program

I wrote a program to easily store/edit my comic book collection. I can add, delete and request anything (comic/character/team) by my update statement doesn't work. I made a copy in a query in my access database and that worked perfectly. The strangest thing is that my program doesn't give any errors, it completes the transaction but doesn't change the data in my database. (this is a problem on both comic, character and team updates).

Here is my code to update a comic.

Public Sub UpdateComic(comic As Comic)

    Dim cn As New OleDbConnection(persistenceController.connectiestring)

    Dim cmd As New OleDbCommand("UPDATE tblComics SET serie = @serie, volume = @volume, issue = @issue, release = @release, inpossession = @inpossession, timesread = @read, story = @story, Languages = @languages WHERE ID = @ID", cn)

    cmd.Parameters.AddWithValue("serie", comic.Serie)

    cmd.Parameters.AddWithValue("volume", comic.Volume)

    cmd.Parameters.AddWithValue("issue", comic.Issue)

    cmd.Parameters.AddWithValue("release", comic.Release)

   cmd.Parameters.AddWithValue("inpossession", comic.InPossession)

    cmd.Parameters.AddWithValue("read", comic.Read)

    cmd.Parameters.AddWithValue("story", comic.story)

    cmd.Parameters.AddWithValue("ID", comic.ID)

    cmd.Parameters.AddWithValue("Languages", comic.Language)

    cn.Open()

    cmd.ExecuteNonQuery()

    cn.Close()

End Sub

Can anyone help me with this. Thanks in advance.

Upvotes: 1

Views: 66

Answers (1)

Steve
Steve

Reputation: 216243

Switch the position of the last two parameters added to the OleDbParameterCollection

cmd.Parameters.AddWithValue("Languages", comic.Language)
cmd.Parameters.AddWithValue("ID", comic.ID)

OleDb doesn't recognize the parameters by their name, but by their position. You should add the parameters in the exact order defined by the parameter placeholders in the command text

By the way. OleDb wants its placeholders parameter defined with the single question mark character (?), but MS-Access accepts also the syntax @name probably to have a better upgrade compatibility with its big cousin Sql Server.

Upvotes: 4

Related Questions