2015-08-17 2 views
0

J'utilise VB2010 Express, j'ai un comprimé Mysql avec les champs suivants Ext, CostAssing et CostAct, je suis en train de mettre à jour une table Mysql du résultat obtenu dans un premier requête:Visual Basic 2010 et Mysql Nested requêtes

  • Première requête Get Ext et CostAssing
  • champ Mise à jour deuxième requête CostAct avec une valeur CostAssing

**

Imports MySql.Data.MySqlClient 
Imports System 
Imports System.IO 
Public Class Form1 
    Public dbconn As New MySqlConnection 
    Public sql As String 
    Public sqlQuery As String 
    Public SQLcmd As MySqlCommand 
    Public dbcomm As MySqlCommand 
    Public dbread As MySqlDataReader 
    Dim Ext As String 
    Dim CostAssing As Integer 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     dbconn = New MySqlConnection("Data Source=localhost ; user id=root ; password=password ; database=calls") 
     'First Query Get Extension and CostAssing 
      Try 
      dbconn.Open() 
      sqlQuery = "SELECT Ext,CostAssing FROM estruc " 
      SQLcmd = New MySqlCommand(sqlQuery, dbconn) 
      dbread = SQLcmd.ExecuteReader 
      While dbread.Read() 
       Ext = dbread.Item("Ext") 
       CostAssing = dbread.Item("CostAssing") 
       MsgBox("Ext:" & Ext) 
       'Second Query Update Ext from CostAct to CostAssing 
       Try 
        sqlQuery = "UPDATE estruc SET CostAct = '" & "1000" & "' WHERE Ext = '" & Ext & "'" 
        SQLcmd = New MySqlCommand(sqlQuery, dbconn) 
        dbread = SQLcmd.ExecuteReader 
       Catch ex As Exception 
        MsgBox("Error 2 is :" & ex.Message) 
       End Try 
      End While 
     Catch ex As Exception 
      MsgBox("Error 1 is :" & ex.Message) 
     End Try 
     dbread.Close() 
    End Sub 
End Class 

**

La première course de requête ok, je reçois des champs Ext et CostAssing, mais quand la seconde requête essayer de mettre à jour de CostAct sur le terrain, j'obtiens l'erreur suivante (Rapporté par Catch ex As Exception MsgBox ("Erreur 2 est : "& ex.Message)):

" Erreur 2 est: Il existe déjà un lecteur de données ouvert associé à cette connexion qui doit être fermé en premier. "

PLease, des idées?

Répondre

0

Ajoutez la ligne suivante pour fermer la datareader après la première requête

dbread.Close(); 

Vous voulez stocker les valeurs de dbread premier (datatable ou d'une liste, etc.), fermer la boucle while, puis exécutez la deuxième requête avec:

SQLcmd.ExecuteNonQuery(); 

S'il vous plaît voir this similar question