login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[vb.net 2005] insert into database (Opgelost)

Offline gerits - 22/11/2007 12:51
Avatar van geritsLid ik ben bezig met een programma waar ik gegevens in een database zou moeten wegschrijven. Nu heb ik hier onderstaande code voor:

  1. Dim oConString2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|schoolagenda.mdb;"
  2. Dim oCon2 As New OleDb.OleDbConnection(oConString2)
  3.  
  4. Dim sqlVakBestaat As String = "SELECT COUNT(*) FROM tblVakken WHERE Naam = '" & Me.txtVakAdd.Text & "'"
  5. Dim oCmdVakBestaat As New OleDbCommand(sqlVakBestaat, oCon2)
  6.  
  7. Try
  8. oCon2.Open()
  9. Dim oReaderVakBestaat As OleDbDataReader = oCmdVakBestaat.ExecuteReader
  10. oReaderVakBestaat.Read()
  11. If (Me.txtVakAdd.Text.Equals("")) Then
  12. MessageBox.Show("Vul een vaknaam in!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  13. ElseIf (oReaderVakBestaat(0) > 0) Then
  14. MessageBox.Show("Het ingevoerde vak bestaat reeds!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  15. Else
  16. 'insert into database
  17. Dim sSQL As String = "INSERT INTO tblVakken(naam) VALUES('" & Me.txtVakAdd.Text & "')"
  18. Dim oCom As New OleDbCommand(sSQL, oCon2)
  19.  
  20. Try
  21. oCom.ExecuteNonQuery()
  22. Catch ex As Exception
  23. MsgBox(ex.Message)
  24. Finally
  25. oCom.Dispose()
  26. oCon2.Dispose()
  27. oCon2.Close()
  28. End Try
  29. End If
  30. oCmdVakBestaat.Dispose()
  31. Catch ex As Exception
  32. MessageBox.Show(ex.ToString)
  33. Finally
  34. oCon2.Close()
  35. oCon2.Dispose()
  36. End Try

Zolang het programma draait lijkt hij de gegevens wel in de database te zetten, maar als ik het afsluit zijn de ingevoerde gegevens weer weg. Wat ontbreekt er nog?

5 antwoorden

Gesponsorde links
Offline Abbas - 22/11/2007 13:54
Avatar van Abbas Gouden medaille

Crew .NET
Waarom 2x een verbinding sluiten als je ze maar een keer open doet. Op regel 27 sluit je de verbinding en daarna nog eens op regel 34. Dat is zeker niet in orde. Declareer voor de duidelijkheid eens je variabelen op voorhand en niet apart allemaal in een codeblok. Wat nog niet logisch is, is dat je al een query maakt gebaseerd op de waarde van een tekstvak en pas daarna gaat controleren of er wel iets ingevuld is. Het is een beetje rommelige code, vind je zelf niet?

  1. Dim oConString2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|schoolagenda.mdb;"
  2. Dim oCon2 As New OleDb.OleDbConnection(oConString2)
  3. Dim sqlVakBestaat As String
  4. Dim sSQL As String
  5. Dim oCmdVakBestaat As OleDbCommand()
  6. Dim oCom As OleDbCommand()
  7. Dim oReaderVakBestaat As OleDbDataReader
  8.  
  9. If (Me.txtVakAdd.Text.Equals("")) Then
  10. MessageBox.Show("Vul een vaknaam in!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  11. Else
  12. Try
  13. oCon2.Open()
  14. sqlVakBestaat = "SELECT COUNT(*) FROM tblVakken WHERE Naam = '" & Me.txtVakAdd.Text & "'"
  15. oCmdVakBestaat = New OleDbCommand(sqlVakBestaat, oCon2)
  16. oReaderVakBestaat = oCmdVakBestaat.ExecuteReader
  17. oReaderVakBestaat.Read()
  18.  
  19. If (oReaderVakBestaat(0) > 0) Then
  20. MessageBox.Show("Het ingevoerde vak bestaat reeds!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  21. Else
  22. 'insert into database
  23. sSQL = "INSERT INTO tblVakken(naam) VALUES('" & Me.txtVakAdd.Text & "')"
  24. oCom = New OleDbCommand(sSQL, oCon2)
  25.  
  26. Try
  27. oCom.ExecuteNonQuery()
  28. Catch ex As Exception
  29. MsgBox(ex.Message)
  30. Finally
  31. oCom.Dispose()
  32. End Try
  33. End If
  34.  
  35. oCmdVakBestaat.Dispose()
  36. Catch ex As Exception
  37. MessageBox.Show(ex.ToString)
  38. Finally
  39. oCon2.Close()
  40. oCon2.Dispose()
  41. End Try
  42. End If


Probeer dit eens, misschien heb ik per ongeluk met het op voorhand definieren van variabelen een klein foutje gemaakt maar normaal is deze code al veel beter. Verder heb ik niet direct een fout gevonden in je code.
Offline gerits - 22/11/2007 14:20
Avatar van gerits Lid ben nog maar pas terug begonnen met programmeren, en door al het opzoeken is mijn code nogal rommelig geworden..
maar met bovenstaande code doet hij nog altijd hetzelfde. Hij voegt het wel toe enzo, maar als ik mijn programma sluit is het weer weg.
Offline Abbas - 22/11/2007 14:30
Avatar van Abbas Gouden medaille

Crew .NET
Hm dan zal ik er straks nog eens verder naar zoeken, maar de code is nu in ieder geval al logischer en duidelijker! 
Offline gerits - 22/11/2007 15:34 (laatste wijziging 22/11/2007 15:44)
Avatar van gerits Lid dat is al een feit merci alvast

edit: ik heb zojuist iets ontdenkt. Als ik het programma build zet hij wel alles gewoon in de database zoals het hoord, maar als ik debug schrijft hij niks weg. Maar het werkt dus wel in princiepe 
Offline Abbas - 22/11/2007 16:30
Avatar van Abbas Gouden medaille

Crew .NET
Wat wil je eigenlijk zeggen met dat het wel werkt als je build maar niet als je debugt? Probeer eerst het programma te ontwikkelen en debuggen zonder rekening te houden met het feit of er al dan niets weggeschreven wordt. Daarna test je het programma vanuit de .exe en niet vanuit Visual Studio. Als de .exe werkt is er niets aan de hand! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.194s