【问题标题】:mysqlexception was unhandled - There is already an open DataReader associated with this Connection which must be closed firstmysqlexception 未处理 - 已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭
【发布时间】:2013-12-27 22:16:44
【问题描述】:

所以我正在尝试使用表单来更新我在 xampp 上的数据库。但是当我尝试更新时,我在这部分的标题中出现错误:reader = objcommand.ExecuteReader() 非常感谢所有帮助。

代码如下:

    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

所以基本上我正在填写表单上的文本框,一旦我点击提交,它应该使用新记录更新数据库。

【问题讨论】:

  • 你必须停止使用那个`字符。
  • 这就是你滥用全局变量时得到的结果。您从哪里获得 ExecuteReader 中使用的 objcommand?

标签: php mysql vb.net sqldatareader


【解决方案1】:

切换到使用Parameterized Queries。这会帮助你。参数的数量将按顺序与表中的列数匹配。根据需要创建 ADO 对象并在 Sub 例程结束时关闭它们。

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

SQL Tutorial

【讨论】:

  • 我删除了字符,当你的意思是值时,你的意思是字段长度?因为那是大多数情况下的 VARCHAR。我正在查看您发送的链接,它们使用值作为特定记录?
猜你喜欢
  • 2020-09-25
  • 1970-01-01
  • 2019-01-17
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 2013-07-18
相关资源
最近更新 更多