Felix_Roscher Geschrieben 1. Dezember 2009 Autor Geschrieben 1. Dezember 2009 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. Zitieren
.NETter Geschrieben 1. Dezember 2009 Geschrieben 1. Dezember 2009 Hallo, ich habe Dir einen SQL-Statement für C# geschickt 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 Zitieren
Felix_Roscher Geschrieben 1. Dezember 2009 Autor Geschrieben 1. Dezember 2009 nein sind keine testzeilen so habe ich das in meinem Programm geschrieben. Zitieren
.NETter Geschrieben 1. Dezember 2009 Geschrieben 1. Dezember 2009 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 Zitieren
Felix_Roscher Geschrieben 1. Dezember 2009 Autor Geschrieben 1. Dezember 2009 ich glaube ich werde doch erstmal die grundlagen dafür lernen bevor ich an der ganzen sache weiter mache. Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 habe jetzt alles noch mal so gemacht wie ihr mir gesagt habt und nun kommt endlich eine fehler meldung. fehlermeldung lautet: ES WURDE VERSUCHT, IM GESCHÜTZTEN SPEICHER ZU LESEN ODER ZU SCHREIBEN. heißt es das die Datenbank schreib geschützt ist? Zitieren
BlackDragon83m Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 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 Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 danke werde das gleich mal überprüfen. wenn das daran liegt dann fresse ich ein besen weil ich komplizierter gedacht habe. Zitieren
.NETter Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 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 Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 danke das du dir wegen mir so ne mühe machst. weiß gar nicht wie ich mich dafür bedanken kann. Zitieren
.NETter Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 Der Beste Dank wäre wenn irgendwann mal kommt "ES FUNKTIONIERT!" Gruß, Thomas Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 ist ok eine frage habe ich noch. bei der Zeile Dim sql As String = "INSERT INTO vbtest(Kundenname, Spotname) VALUES (?, ?)" in der klammer bei Values sollen die fragezeichen bleiben oder was kommt da rein? und was meinst du mit dem Connectionstring?? Zitieren
.NETter Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 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. Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 gut danke ich versuche es gleich mal. melde mich später wenn es klappt. Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 eine kleine frage habe ich noch was muss ich in die klammer rein schreiben??? Dim con As New OleDb.OleDbConnection("Hier steht Dein Connectionstring") Zitieren
.NETter Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 Provider=MySQLProv;Data Source=Dein Host-/Datenbankname;User Id=DeinBenutzername;Password=DeinPasswort Connectionstrings kannst Du auch hier nachschlagen: connectionstrings.de Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 und wie ist das wenn ich das über ODBC mache? weil mein chef kam gerade an und sagte ich soll auf die datenbank mit ODBC zugreifen weil es auch eine datenbank wäre mit ODBC. Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 ich verstehe es nicht es klappt immer noch nicht. ich weiß echt nicht was ich falsch mache. Zitieren
.NETter Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 Hallo, die Vorgehensweise ist die gleiche, ob nun OleDB oder ODBC. Aber ich denke Du solltest Dir wirklich einmal allgemeine Grundlagen aneignen. Hier nochmal der bereits empfohlene Link: Galileo Gruß, Thomas Zitieren
Felix_Roscher Geschrieben 2. Dezember 2009 Autor Geschrieben 2. Dezember 2009 das kenn ich schon das habe ich mir schon durchgearbeitet. ich habe es genau so gemacht wie es dort drin steht aber es geht auch nicht. Zitieren
.NETter Geschrieben 2. Dezember 2009 Geschrieben 2. Dezember 2009 Hallo, im Kapitel 8 steht wirklich Schritt für Schritt was getan werden muss. Auch Wichtig "Treiber Installation". "Geht nicht" ist eine magere Beschreibung. Was passiert? Welche Fehlermeldung wird ausgegeben? Gruß, Thomas Zitieren
Felix_Roscher Geschrieben 3. Dezember 2009 Autor Geschrieben 3. Dezember 2009 ne hat sich erledigt mit dem fehler. ich habe da was falsch gemacht weil das programm lässt sich jetzt nicht mehr ausführen. ich werde es einfahc noch mal machen. Zitieren
Felix_Roscher Geschrieben 3. Dezember 2009 Autor Geschrieben 3. Dezember 2009 es kommt jetzt eine Fehlermeldung die lautet. Provider=MySQLProv ist auf dem lokalen rechner nicht registriert. was kann ich da tun. Zitieren
Felix_Roscher Geschrieben 3. Dezember 2009 Autor Geschrieben 3. Dezember 2009 he Thomas. ich muss dir jetzt Danken es Klappt alles super ich kann speichern und löschen. alles kklappt so wie ich es wollte danke für die hilfe. Zitieren
.NETter Geschrieben 3. Dezember 2009 Geschrieben 3. Dezember 2009 Geduld und Beharrlichkeit zahlen sich immer aus! Kein Problem, gern geschehen! Gruß, Thomas Zitieren
Empfohlene Beiträge
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.