oledbcommand update Problem bei Parameter

  • VB.NET
  • .NET (FX) 4.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von oliver3121.

    oledbcommand update Problem bei Parameter

    Hallo, komme an dieser Stelle einfach nicht weiter:


    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim dbconn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\FEDB.accdb;Jet OLEDB:Database Password=yyy")
    3. Dim objcmd As New OleDbCommand
    4. Dim strSQL As String
    5. Try
    6. dbconn.Open()
    7. strSQL = "update tbl_daten set [gemarkunglistwert] = 'k. A.' where [ID] = @id"
    8. objcmd.Parameters.Add("@id", OleDbType.Guid, 36).Value = "0598f634-5e45-474c-b148-bd6e4ffea590"
    9. objcmd = New OleDbCommand(strSQL, dbconn)
    10. objcmd.ExecuteNonQuery()
    11. dbconn.Close()
    12. Catch myException As System.Exception
    13. Windows.Forms.MessageBox.Show(myException.Message)
    14. End Try
    15. End Sub
    16. End Sub


    Tausche ich versuchsweise @id gegen '0598f634-5e45-474c-b148-bd6e4ffea590' aus, funktioniert alles. Es liegt scheinbar am Parameter. Ziel der Sache ist es eigentlich
    statt Value eine stringvariable zu verwenden.
    Hi,

    bei OleDB sind die Parameter im Query selber mit ? zu benennen. Sie werden auch nicht über den Namen zugeordnet sondern nur über die Position. Außerdem musst du bei den Typen auch die richtigen Typen in NET verwenden. Eine OleDbType.Guid ist in NET eine System.GUID:

    support.microsoft.com/de-de/kb/320435
    Das ist meine Signatur und sie wird wunderbar sein!
    Danke, aber der Versuch

    VB.NET-Quellcode

    1. strSQL = "update tbl_daten set [gemarkunglistwert] = 'k. A.' where [ID] = ?"
    2. objcmd.Parameters.Add("@p1", OleDbType.Guid, 36).Value = "0598f634-5e45-474c-b148-bd6e4ffea590"


    (nach: msdn.microsoft.com/de-de/libra…bparameter(v=vs.110).aspx)
    führt auch zu nichts.
    - andere Spaltenpositionen schon durchprobiert
    - System.Guid wird nicht akzeptiert

    übrigens gibt es auch andere Beispiele für Spaltenbezeichnungen, bei denen mit Namen operiert wird. Z.B. hier:
    vbarchiv.net/forum/id24_i16924…b-ueber-oledbcommand.html

    Würde mich über jeden Tipp sehr freuen.
    Danke für den Hinweis.
    Um den Fehler zu finden, habe ich eine einfache Db erstellt "Test.accdb" mit 3 Spalten ("ID", "straße", "haus"). Spalte "haus" ist Spalte 3, Textformat,
    Spaltenbreite: 5 Zeichen.

    Der update-Befehl wird wie oben ausgeführt und funktioniert mit

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = 'haus2'"

    Die where-Klausel soll als Parameter angesprochen werden. Der fehlende Parameter wird mir angezeigt für:

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = @haus"
    2. objcmd.Parameters.AddWithValue("@haus", "haus2")

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = ?"
    2. objcmd.Parameters.AddWithValue("@p3", "haus2")

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = @haus"
    2. objcmd.Parameters.Add("@haus", OleDbType.VarWChar, 5, "haus").Value = "haus2"

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = @haus"
    2. objcmd.Parameters.Add("@haus", OleDbType.VarWChar, 5).Value = "haus2"

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = ?"
    2. objcmd.Parameters.Add("@p3", OleDbType.VarWChar, 5, "haus").Value = "haus2"

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = @haus"
    2. Dim MeineParameter As OleDbParameter
    3. MeineParameter = New OleDbParameter()
    4. MeineParameter.ParameterName = "@haus"
    5. MeineParameter.OleDbType = OleDbType.VarWChar
    6. MeineParameter.Size = 5
    7. MeineParameter.SourceColumn = "haus"
    8. objcmd.Parameters.Add(MeineParameter).Value = "haus2"

    Was mache ich verkehrt?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „oliver3121“ ()

    oliver3121 schrieb:

    ...weiß nicht ganz, welche Stelle Du meinst.


    wie kann das sein?

    beachte: zB #4 ist ein Numerierung - betrachte also Post#5 (das ist der 5. Post, der mit der Nummer 5).
    Darin sind - zähl mal nach - 6 Code-Listings. ich meinte folglich mit Listing#3 das 3. Listing, in der Reihenfolge von oben nach unten gezählt, mit 1 als erster Zahl.
    Das Listing hat 2 Zeilen, die sind sogar numeriert, und davon meinte ich zeile#2.

    Nachdem nun die Erklärung der Erklärung erklärt ist, weißt du vmtl. überhaupt nicht mehr worums geht, daher zitiere ich nochmal die Kommunikation:

    oliver3121 schrieb:

    Was mache ich verkehrt?

    ErfinderDesRades schrieb:

    glaub in listing#3 hättest du zeile#2 nicht auskommentieren sollen

    Ehm

    ich seh grad deinen Hauptfehler LOOOL

    VB.NET-Quellcode

    1. Dim objcmd As New OleDbCommand
    2. objcmd.Parameters.Add("@id", OleDbType.Guid, 36).Value = "0598f634-5e45-474c-b148-bd6e4ffea590"
    3. objcmd = New OleDbCommand(strSQL, dbconn)


    Du erstellst nachdem du den Parameter hinzufügst eine neue Referenz. Die Syntax ansonsten passt wie hier:

    VB.NET-Quellcode

    1. strSQL = "update Tabelle1 set straße = 'k.A.' where haus = ?"
    2. dim objcmd as OleDBCommand = new OleDbCommand(strSQL, conn);
    3. objcmd.Parameters.AddWithValue("@p3", "haus2")
    Das ist meine Signatur und sie wird wunderbar sein!
    Kleiner Hinweis weil du es gerade erwähnst. Besagte Fehlermeldung hast du nicht gepostet. Die lautet vermutlich sowas wie: "Ein nötiger Parameter wurde nicht übermittelt".

    Dann hätte es vll auch gleich jemand gesehen. ;)
    Das ist meine Signatur und sie wird wunderbar sein!