mysqlexception was unhandled - There is already an open DataReader associated with this Connection which must be closed first

别等时光非礼了梦想. 提交于 2019-12-13 06:26:49

问题


So I am trying to use the form to update my database on xampp. But when I try update I get the error in the title at this part: reader = objcommand.ExecuteReader() All help is much appreciated.

Here is the code:

    Imports MySql.Data
Imports MySql.Data.MySqlClient
Imports System.Drawing.Printing
Imports System
Imports System.Windows.Forms

Public Class frmClientDetails
    Dim form_type As Form
    Dim user_table As String
    Dim objconnection As New MySqlConnection("Server=localhost;database=ba-solutions;user id=root;password=")
    Dim sqlstring As String

    Private Sub frmClientDetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DGVClient.Columns.Clear()
        Dim dt As New DataTable
        objdataadapter.SelectCommand = New MySqlCommand()
        objdataadapter.SelectCommand.Connection = objconnection
        objdataadapter.SelectCommand.CommandType = CommandType.Text
        objdataadapter.SelectCommand.CommandText = "SELECT * FROM Client_Details"
        objdataadapter.Fill(dt)


        rowposition = 0

        DGVClient.DataSource = dt

    End Sub
    Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
        frmMainMenu.Show()
        Me.Hide()
    End Sub

    Private Sub btnClearAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearAll.Click
        txtCompanyName.Clear()
        cbxCompanyType.Items.Clear()
        txtVAT.Clear()
        txtPAYE.Clear()
        txtAddressLine.Clear()
        txtCity.Clear()
        txtPostcode.Clear()
        txtEmail.Clear()
        txtPhoneNumber.Clear()
    End Sub


    Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click


        If Len(txtCompanyName.Text) < 1 Then
            MsgBox("Enter a Company Name")
            Return
        End If

        If Len(cbxCompanyType.Text) < 1 Then
            MsgBox("Enter a Company Type")
            Return
        End If

        If Len(txtVAT.Text) <> 9 Then
            MsgBox("The VAT Registration Number must be 9 numbers")
            Return
        End If

        If Len(txtPAYE.Text) <> 8 Then
            MsgBox("The PAYE and Tax Reference must be 8 characters")
            Return
        End If

        If Len(txtAddressLine.Text) < 1 Then
            MsgBox("Enter a First Line of Address")
            Return
        End If

        If Len(txtCity.Text) < 1 Then
            MsgBox("Enter a City Name")
            Return
        End If

        If Len(txtPostcode.Text) < 1 Then
            MsgBox("Enter a Postcode")
            Return
        End If

        If Len(txtEmail.Text) < 1 Then
            MsgBox("Enter an Email Address")
            Return
        End If

        If Len(txtPhoneNumber.Text) <> 11 Then
            MsgBox("The Phone Number must be 11 numbers ")
            Return
        End If

        Try
            objconnection.Open()
        Catch ex As Exception
            MsgBox("Error connecting to database", MsgBoxStyle.Information, "Connection Failed")
        End Try

        sqlstring = "Select * FROM client_details"
        Dim currentrecord As Integer = DGVClient.CurrentCellAddress.Y


        objconnection.Close()
        objconnection.Open()

        sqlstring = "Insert into `Client_Details` (`CompanyName` , `CompanyType` , `VATRegistrationNumber , `PAYEandTaxReference` , `AddressLine1` , `City` , `Postcode` , `Email` , `PhoneNumber') Values ('" &
 txtCompanyName.Text & "','" & cbxCompanyType.Text & "' , '" & txtVAT.Text & "','" & txtPAYE.Text & "' , '" & txtAddressLine.Text & "' , '" & txtCity.Text & "' , '" & txtPostcode.Text & "' , '" &
 txtEmail.Text & "' , '" & txtPhoneNumber.Text & "')"
        MsgBox("updated")
        objcommand.CommandText = sqlstring

        reader = objcommand.ExecuteReader()
        MsgBox("update")

    End Sub

    Public Sub count_records()
        Dim reccount As Integer
        reccount = DGVClient.Rows.Count = 1

    End Sub

End Class

So basically I am filling in the text boxes on the form, and once I hit submit it should update the database with the new record.


回答1:


Switch to using Parameterized Queries. That will help you out. The number of parameters will match the number of columns in your table in order. Create the ADO objects as you need them and close them at the end of the Sub routines.

Insert Into [table name] Values(n1, n2, etc...)

SQL Tutorial



来源:https://stackoverflow.com/questions/20808540/mysqlexception-was-unhandled-there-is-already-an-open-datareader-associated-wi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!