(ERLEDIGT) Transaction wirkt nicht, db verliert daten

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von muecke3.16.

    (ERLEDIGT) Transaction wirkt nicht, db verliert daten

    Hallo zusammen

    Mal zu sagen, ich bin neu hier, und denke, dass ich hier hilfe bekommen kann.

    Ich codiere zurzeit an einem kleineren Schulprojekt.
    Als Datenbank habe ich eine Access db gebastelt, uns möchte nun Datensätze erstellen u.s.w.

    Nun. Das Programm läuft ohne fehlermeldungen durch und speichert die Daten, nach einem Update oder Insert scheinbar richtig ab.
    wenn ich nun im Visual studio weiter codiere, und den code speichere und erneut debugge, hat die DB alle daten, weleche ich vorher eingetragen habe verloren.
    Lustigerweise passiert dies nicht, solange ich nichts im quelltext verändere bevor ich erneut debugge

    ich bin nun schon eine weile am probieren und hilfeseiten abgrasen aber scheinbar läuft das irgendwie nicht...

    kann mir wer helfen?


    VB.NET-Quellcode

    1. Dbconnect()
    2. 'sammle daten für command
    3. Dim myOleDbCommand As New OleDb.OleDbCommand
    4. Dim trans As OleDb.OleDbTransaction = myOleDbConnection.BeginTransaction(IsolationLevel.ReadCommitted)
    5. myOleDbCommand.Connection = myOleDbConnection
    6. myOleDbCommand.Transaction = trans
    7. myOleDbCommand.CommandText = sql
    8. 'ich habe es auch in dieser art versucht die transaction auf den command zu setzen, aber gleiches ergebnis
    9. ' Dim mycommand As New OleDb.OleDbCommand(sql, myOleDbConnection, trans)
    10. myOleDbCommand.ExecuteNonQuery()
    11. trans.Commit()
    12. 'Dbconn schliessen
    13. myOleDbConnection.Close()

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Hofnarr“ ()

    Probiere es doch mal mit dem hier, bei mir funktioniert das einwandfrei was access datenbanken angeht:

    VB.NET-Quellcode

    1. Dim conn As New System.Data.OleDb.OleDbConnection
    2. conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\DB.mdb;Jet OLEDB:Database Password=" + Passwort
    3. conn.Open()
    4. 'SQL Befehl für das Auslesen
    5. Dim sql = "select *" & vbCrLf & _
    6. "from Tabelle" & vbCrLf & _
    7. "WHERE ID = 1"
    8. Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, conn)
    9. Dim dr As OleDb.OleDbDataReader
    10. dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
    11. While dr.Read()
    12. 'Hier kommen deine sachen rein die du aus der Datenbank auslesen möchtest
    13. End While
    14. conn.Close()
    Hey Muecke,

    Selects funktionieren einwandfrei (dafür hab ich ne eigene Funktion)

    Ist vllt nicht genug durchgedrückt (wird gleich editiert)
    Es geht mir um die Update und Insert befehle, welche scheinbar nicht einmal bis zur DB kommen.


    (ich sehe die neuen einträge auch direkt im access nicht...
    dann mal ne andere Frage,
    hast du schonmal überprüft ob nach einem Update, oder Insert befehl
    etwas in der Datenbank geändert/hinzugefügt wurde??
    einfach DB aufmachen und nachschauen.
    falls dies der fall ist, kann dein Programm eigentlich nichts dafür dass die daten wieder rausgelöscht werden.
    ausser du hast einen Delet befehl irgendwo eingebaut.
    falls in deiner DB nichts geändert wird, liegt es an deiner Verbindung zu deiner DB

    bei meinem beispiel kannst au auch ganz leicht ein Update oder Insert befehl einfügen.

    ersetz das Select teil zb duch folgendes (nur angepasst auf deine Tabellen und Spalten):

    VB.NET-Quellcode

    1. Dim Sql = "INSERT INTO TVNodes (ParentID, Tag) VALUES (" & var & ", '" & i & "')"
    Da scheint das problem klarer zu werden. ich kann die Daten in der Access db selber nicht sehen.
    was könnte denn an der verbindung mit der lokalen db falsch sein? ?(


    Code der Methode Dbconnect()

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Dim myOleDbConnection As New OleDbConnection
    3. Public Sub Dbconnect()
    4. myOleDbConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\Zeiterfassungdb.mdb;Jet OLEDB:Database Password=''"
    5. Try
    6. myOleDbConnection.Open()
    7. Catch ex As Exception
    8. MessageBox.Show(ex.Message, "Beim Öffnen der Datenbank ist ein Fehler aufgetreten.")
    9. End Try
    10. End Sub
    So Leute, ich hatte gestern Schule und ich konnte das Problem beheben.

    Es ist so, dass mit "My.Application.Info.DirectoryPath" nicht der pfad der eigentlichen DB angibt, sondern auf das Bin directory zeigt. Die datenbank wird beim Debuggen dort hin kopiert und nach einer änderung im Quellcode gelöscht/überschrieben.

    Ich gebe nun solange ich debuggen will, den Pfadnamen fix an und mache ihn dann beim abgeben wieder Variabel.

    Danke für deine Hilfe.

    Grusse Hofnarr