2016-08-02 26 views
0

Ich habe die folgende Subroutine in meinem Code zum Einfügen eines neuen Datensatzes in eine SQL Server-Datenbank. Nachdem der Code durchlaufen wurde, wird der gesamte Code durchlaufen, das Meldungsfeld wird angezeigt, aber die Zeile wird nicht tatsächlich in die Datenbank eingefügt. Ich weiß, dass es die richtige Verbindung verwendet, wie ich Datensätze auf dem verwandten Raster anzeigen kann, die ich manuell mit SQL Server eingefügt, und auch meine UPDATE und DELETE Abfragen funktionieren, verwenden die gleiche Verbindung, so etwas stimmt nicht mit meinem Code, aber ich kann nicht erarbeiten was ... Kann mir jemand helfen?INSERT-Abfrage wird ausgeführt, aber nicht eingefügt

Public Shared Function SaveNewIncident(ByVal clientName As String, dateStart As Date, dateEnd As Date, ByVal incidentProblem As String, ByVal timeStart As String, ByVal timeEnd As String, 
             ByVal incidentSolved As Boolean, ByVal incidentSolution As String, _con As OleDbConnection) 

    Dim tr As OleDbTransaction = Nothing 

    Try 
     tr = _Con.BeginTransaction() 

     Dim Dc As New OleDbCommand 
     Dc.Connection = _con 

     Dim ID As Integer 
     ID = "1" 

     Dc.CommandType = CommandType.Text 
     Dc.CommandText = "INSERT INTO dbo.tblIncidents VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)" 
     Dc.Transaction = tr 
     Dc.Parameters.Add("@supportID", OleDbType.Integer).Value = ID 
     Dc.Parameters.Add("@clientName", OleDbType.VarChar).Value = clientName 
     Dc.Parameters.Add("@dateStart", OleDbType.Date).Value = dateStart 
     Dc.Parameters.Add("@dateEnd", OleDbType.Date).Value = dateEnd 
     Dc.Parameters.Add("@incidentProblem", OleDbType.LongVarChar).Value = incidentProblem 
     Dc.Parameters.Add("@timeStart", OleDbType.VarChar).Value = timeStart 
     Dc.Parameters.Add("@timeEnd", OleDbType.VarChar).Value = timeEnd 
     Dc.Parameters.Add("@incidentSolved", OleDbType.Boolean).Value = incidentSolved 
     Dc.Parameters.Add("@incidentSolution", OleDbType.LongVarChar).Value = incidentSolution 

     tr.Commit() 

     MsgBox("Save successful") 

    Catch ex As Exception 

     mdInit.errorLog(ex.Message, ex.StackTrace) 
     MsgBox("Failed to save data, refer to error log") 
     tr.Rollback() 

    End Try 

End Function 
+4

Ich glaube, Sie nennen müssen 'Dc.ExecuteNonQuery()' 'vor tr.Commit()' – user5226582

+0

@ user5226582 Ja, danke, natürlich ... einfach etwas dumm – David

Antwort

2

Sie haben Ihre Einfügeabfrage nicht ausgeführt. fügen Sie den folgenden Code vor tr.Commit()

Dc.ExecuteNonQuery() 
+0

Danke Akshey, das hat funktioniert. Eine Sache, die ich gerne ändern würde ist, dass in diesem Code supportID immer als 1 eingegeben wird ... Wie kann ich den Code anpassen, um die höchste ID-Nummer in der Datenbank zu finden, 1 hinzufügen und diese Nummer einfügen? – David

+1

Convert Support-ID-Spalte in eine Identitätsspalte. Auf diese Weise erhalten Sie immer den erforderlichen Wert. –

+0

Ich hatte dies ursprünglich, aber es gibt einen Punkt im Programm, wo ich es benötigt, da ich explizite Werte – David