问题
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