Zum Inhalt springen

formulardaten speichern


Felix_Roscher

Empfohlene Beiträge

Private Sub cmdspei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspei.Click

        'Dim con As New OleDb.OleDbConnection

        Dim cmd As New OleDb.OleDbCommand

        'Dim anzahl As Integer

        Try

            cmd.CommandText = _

               "INSERT INTO tab_spot(Kundenname, Spotname, Sprecher1, Sprecher2, Sprecher3, Branche, Musik, Spottext, Spotbeschreibung, Spotlaenge)" & _

               "VALUES (" + txtkname.Text + "," + txtspname.Text + "," + txtsp1.Text + "," + txtsp2.Text + "," + txtsp3.Text + "," + cmdbra.Text + "," + txtmus.Text + "," + txtsptex.Text + "," + txtkbez.Text + "," + txtspl.Text + ")"

            MsgBox(cmd.CommandText)

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try


    End Sub

das ist der Quellcode.

und ich sehe einfach nicht wo da was falsch sein soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 51
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Hallo,

ich habe Dir einen SQL-Statement für C# geschickt :D

Das wird so natürlich nicht in Deinen VB .Net Code passen...

Hier mal für VB .Net:


"INSERT INTO tab_spot(Kundenname, Spotname, Sprecher1, Sprecher2, Sprecher3, Branche, Musik, Spottext, Spotbeschreibung, Spotlaenge) VALUES (" & txtkname.Text & "," & "txtspname.Text" & "," & txtsp1.Text & "," & txtsp2.Text & "," & txtsp3.Text & "," & cmdbra.Text & "," & txtmus.Text & "," & txtsptex.Text & "," & txtkbez.Text & "," & txtspl.Text & ")"

Lass einfach die Zeilenumbrüche (SQL-String) im Code mal weg und benutze das Statement aus diesem Beitrag.

Wo führst Du das Command aus (command.ExecuteNonQuery())? Und wo werden die Verbindungen zur DB geöffnet und geschlossen? Oder sind das nur Testzeilen?

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

habe hier ganz auf die Schnelle mal ein paar Zeilen Code zusammengebaut die dir fürs Erste weiterhelfen sollten:


    Private Sub cmdspei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspei.Click

        'Connection erstellen / Der Connectionstring muss natürlich angepasst werden!

        Dim con As New OleDb.OleDbConnection("Provider=MySQLProv;Data Source=Host-/Datenbankname;User Id=myUsername;Password=myPassword ")

        'Statement als string erstellen

        Dim sql As String = "INSERT INTO tab_spot(Kundenname, Spotname, Sprecher1, Sprecher2, Sprecher3, Branche, Musik, Spottext, Spotbeschreibung, Spotlaenge) VALUES (" + txtkname.Text + "," + txtspname.Text + "," + txtsp1.Text + "," + txtsp2.Text + "," + txtsp3.Text + "," + cmdbra.Text + "," + txtmus.Text + "," + txtsptex.Text + "," + txtkbez.Text + "," + txtspl.Text + ")"

        'Command erstellen und diesem das SQL-Statement UND die Verbindung zuweisen!

        Dim cmd As New OleDb.OleDbCommand(sql, con)


        Try

            'Verbindung zur DB öffnen

            con.Open()

            'Command ausführen

            cmd.ExecuteNonQuery()

            'Verbindung wieder schliessen

            con.Close()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

    End Sub

Du solltest Dich aber wirklich mit den Grundlagen beschäftigen sonst helfen Dir dort auch keine Beispiele mehr weiter.

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann es sein, dass dein User mit dem du die Connection aufmachst in der DB keine Schreib / Leserechte hat?

Bei MS SQL wären dass Datareader / Datawriter ... ohne diese Rechte des SQL Users darf der dann natürlich auch nichts in die DB schreiben bzw. nichts aus der DB lesen.

Von daher -> Rechtevergabe der Datenbank überprüfen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich tippe darauf, dass es an der noch fehlenden Transaktionssicherheit liegt.

Ich habe mir mal die Mühe gemacht und den Code von gestern etwas angepasst. Es werden jetzt OleDB-Parameter genutzt. Das Command-Objekt führt das SQL-Statement jetzt in einer Transaktion aus. Das Schreiben in geschützten Speicher... usw. ist eine häufige Fehlermeldung für nicht transaktionssichere Anweisungen.

Hier mal der neue Code (Bitte auf die noch zu erstellenden Anpassungen achten!):


    Private Sub cmdspei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdspei.Click

        'Connection erstellen / Der Connectionstring muss natürlich angepasst werden!

        Dim con As New OleDb.OleDbConnection("Hier steht Dein Connectionstring")

        'Statement als string erstellen (Noch ergänzen! Für jeden Parameter ein Fragezeichen...)

        Dim sql As String = "INSERT INTO vbtest(Kundenname, Spotname) VALUES (?, ?)"

        'Command erstellen und diesem das SQL-Statement zuweisen!

        Dim cmd As New OleDb.OleDbCommand(sql)


        'Parameter erstellen (100 ist hier die Feldgröße also anpassen!)

        Dim paramKundenname As New OleDbParameter("@kundenname", OleDbType.VarChar, 100)

        Dim paramSpotname As New OleDbParameter("@spotname", OleDbType.VarChar, 100)


        'Hier werden Parameter hinzugefügt was wesentlich sicherer und im SQL-String einfacher zu handhaben ist

        'Hinzufügen der Parameter zum Command (Hier ist die Reihenfolge WICHTIG!)

        cmd.Parameters.Add(paramKundenname).Value = txtkname.Text

        cmd.Parameters.Add(paramSpotname).Value = txtspname.Text


        Dim transaction As OleDbTransaction

        Dim affectedRows As Integer = 0


        Try            

            'Verbindung zur DB öffnen

            con.Open()

            transaction = con.BeginTransaction(IsolationLevel.ReadCommitted)

            cmd.Connection = con

            cmd.Transaction = transaction

            'Command ausführen

            affectedRows = cmd.ExecuteNonQuery()

            'Verbindung wieder schliessen

            transaction.Commit()

            con.Close()

            MessageBox.Show(String.Format("Es wurden {0} Datensätze eingefügt.", affectedRows.ToString()))

        Catch ex As Exception

            MsgBox(ex.Message)

        Finally

            con.Close()

        End Try

    End Sub

Gruß,

Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

die Fragezeichen sind Platzhalter für Parameter. Also bleiben die Fragezeichen stehen. Für jeden Wert den Du in VALUES() übergeben willst stellst Du ein Fragezeichen ein.

Beispiel:

INSERT INTO tabelle1 (vorname, nachname) VALUES (?, ?)
In dieser Reihenfolge wie du die Werte im SQL-Statement benötigst fügst du die OleDB-Parameter dem Command hinzu.

        Dim paramVorname As New OleDbParameter("@vorname", OleDbType.VarChar, 100)

        Dim paramNachname As New OleDbParameter("@nachname", OleDbType.VarChar, 100)


        'Hinzufügen der Parameter zum Command ([COLOR="Red"]Hier ist die Reihenfolge WICHTIG![/COLOR])

        cmd.Parameters.Add(paramVorname).Value = "Bill"

        cmd.Parameters.Add(paramNachname).Value = "Gates"

Daher ist die Reihenfolge wichtig. Die Parameter haben im Statement keinen Namen und werden nur der Reihenfolge nach zugewiesen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...