(Vb.net)Bağlantı kapatılmadı sorunu

sergenk (1) 9 yıl önce sordu

Kod bloğum aşağıda

"Bağlantı kapatılmadı. Bağlantının geçerli durumu: açık." hatası veriyor

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      
        Dim sayi1 As Integer
        sayi1 = CInt(TextBox2.Text)
        TextBox2.Text = sayi1.ToString("C")
        SetMyCustomFormat()

        bag.Open()


        kmt.CommandText = "SELECT Count(id) from koop"
        Dim a As Integer
        Dim idsorgu
        a = kmt.ExecuteScalar()

        idsorgu = "SELECT id from koop"
        kmt = New OleDbCommand(idsorgu, bag)
        Dim reader As OleDbDataReader = kmt.ExecuteReader()

        Dim b As Integer
        Dim sorgu
        Dim c
        For b = 1 To a

            reader.Read()
            sorgu = " SELECT plaka from koop where id=(" & reader(0).ToString() & ")"
            kmt = New OleDbCommand(sorgu, bag)
            c = kmt.ExecuteScalar()
            kmt.CommandText = "INSERT INTO aidat(plaka, MakbuzNo, Tarih, Miktar,Donem) VALUES ('" & c.ToString() & "','" & TextBox1.Text & "','" & DateTimePicker1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "') "
            kmt.ExecuteNonQuery()


            uret()

        Next
        bag.Close()


        uret()

    End Sub

 

Sub uret()
        
        Randomize()
        Dim sayi1 = Format(Now, "yyyy") & Int(Rnd(1) * (100000))
        Dim ure
        TextBox1.Text = sayi1
        Dim Makbuzno = TextBox1.Text

        kmt.Connection = bag
        bag.Open()

        ure = "Select Makbuzno From aidat Where Makbuzno=" + TextBox1.Text + " "
        kmt = New OleDbCommand(ure, bag)
        Dim dr As OleDbDataReader
        dr = kmt.ExecuteReader

        Do While dr.Read
            
            If dr("Makbuzno") = Makbuzno Then
                Randomize()
                sayi1 = Format(Now, "yyyy") & Int(Rnd(1) * (100000))
                TextBox1.Text = sayi1

            End If

        Loop

        bag.Close()


      
    End Sub

 

Toplam 1 cevap


alattin (17127) 9 yıl önce cevapladı

Connection yani bağlantı masraflı bir işlemdir. Yani sistem kaynaklarını meşgul eder ve tüketir.

O sebepten bir bağlantı açtığında  olabildiğince kısa sürede kapatman gerekir.

Bağlantıyı açtıkdan sonra  bağlantı açıkken,  aşağıdaki gibi değişken tanımlama, atama yapma gibi işlemleri yapmamalısın.

 SetMyCustomFormat()

        bag.Open()


        kmt.CommandText = "SELECT Count(id) from koop"
        Dim a As Integer
        Dim idsorgu

Bunları bağlantının dışında yapmalısın.

degiskenTanimla
atamaYap
......
......
......

baglanti.Ac
baglantiUzerindenSorgunuCalistir
baglantiKapat
......

Eğer sorgu sonucunda veritabanından dönen değer varsa bunu Dataset, datatable gibi bağlantısız çalışacak bir nesne üzerine doldurmalısın. Daha sonra bu veri üzerinde işlem yapmalısın.

Bağlantın açıkken (Buton1 click olayında) sen yine başka bir bağlantı açılıyorsun(uret).

Bu yüzden  Bağlantı kapatılmadı. Bağlantının geçerli durumu: açık. hatası alıyorsun.