BG Development


  Reply to this topicStart new topicStart Poll

> Проблем с транзакция
orlinb
Публикувано на: 30-01-2021, 23:04
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 10.01.09



Трябва да променя или добавя редове в няколко таблици в база данни /SQL server database/.Промяната трябва да обхване всички таблици, в които извършвам промените. Ако в една от тях възникне изключение промяната трябва да се откаже. За това използвам транзакция. За да пробвам метода написах показания код. При опит промените да се запишат в базата възниква следната грешка:
ExecuteNonQuery requires the command to have a transaction when the connection assigned to the command is in a pending local transaction. The Transaction property of the command has not been initialized.
Без използване на транзакция кодът работи. Това, което открих в нета за тази грешка не ми свърши работа. Работя с VS2019 - VB.net /ако това има значение/. Опитах доста неща но безуспешно. Очаквам предложения за решение на проблема.
А ето и кода:

CODE

       Dim Database_2 As String = "Server=****;Database=***.MDF;Trusted_Connection=True"
       
       Dim str_sql As string = "Select * from aktiv"
       Dim Conec2 As New SqlConnection(Database_2)
       Conec2.Open()

       Dim DS2 As New DataSet()
       Dim DA2 = New SqlDataAdapter(str_sql, Conec2)
       Dim KB As New SqlCommandBuilder(DA2)
       DA2.UpdateCommand = KB.GetUpdateCommand

       DA2.Fill(DS2, "aktiv2")

       Dim red As DataRow = DS2.Tables("aktiv2").NewRow
       Dim n As Integer

       '******************************************************** начало trans

       Dim trans As SqlTransaction
       trans = Conec2.BeginTransaction()
       DA2.UpdateCommand.Transaction = trans

       Try
           With DS2.Tables("aktiv2")
               For n = 1 To 10
               red("aktivID") = n
               red("ime") = "Актив " & n.ToString
               red("marka") = "Мярка " & n.ToString
               DS2.Tables("aktiv2").Rows.Add(red)
               red = DS2.Tables("aktiv2").NewRow
               Next
           End With

           DA2.Update(DS2.Tables("aktiv2"))    ‘Тук възниква грешката

           trans.Commit()

           MsgBox("1 Активите прехвърлени - " & n.ToString & " - записа")

       Catch ex As Exception
           trans.Rollback()
           MsgBox("ГРЕШКА в активи: - " & ex.Message)
           Exit Sub
       Finally
           Conec2.Close()

       End Try

PMEmail Poster
Top
orlinb
Публикувано на: 01-02-2021, 20:16
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 10.01.09



Благодаря за интереса. Проблемът е решен.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0