2016-08-02 2 views
0

У меня есть следующая подпрограмма в моем коде для вставки новой записи в базу данных SQL Server. После прохождения через него код проходит через все это, появляется окно сообщения, но строка фактически не вставлена ​​в базу данных. Я знаю, что он использует правильное соединение, поскольку я могу просматривать записи в связанной сетке, которые я вручную вставил с помощью SQL Server, а также мои запросы UPDATE и DELETE работают с использованием того же соединения, поэтому с моим кодом что-то не так, но я не могу выясните, что ... Кто-нибудь может мне помочь?Запрос INSERT выполняется, но не вставляется

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

Я думаю, вам нужно вызвать 'Dc.ExecuteNonQuery()' 'Перед tr.Commit()' – user5226582

+0

@ user5226582 Да, спасибо, конечно ... Просто что-то глупое – David

ответ

2

Вы не выполнили свой запрос на вставку. добавьте следующий код перед тем tr.Commit()

Dc.ExecuteNonQuery() 
+0

Спасибо Акшей, это сработало. Одна вещь, которую я хотел бы изменить, это то, что в этом коде поддержкаID всегда вводится как 1 ... Как я могу адаптировать код, чтобы найти самый высокий идентификационный номер в базе данных, добавить 1 к нему и вставить этот номер? – David

+1

преобразовать столбец идентификатора поддержки в столбец идентификатора. таким образом вы всегда получите требуемое значение. –

+0

У меня это было изначально, но есть точка в программе, где мне это нужно, поскольку мне пришлось вставлять явные значения – David

Смежные вопросы