Un DataReader associé à cette commande est déjà ouvert. Il doit d'abord être fer

guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009 - 8 juil. 2009 à 13:51
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 8 juil. 2009 à 21:30
Je suis en train de faire une BDtheque et j'ai un tit soucis au niveau des auteurs. Je voudrais que quand je sélectionne une BD dc une ligne du datagridview associé aux albums, il y ait toutes les informations sur cette BD. Le problème se situe pour les auteurs car je ne les affiche pas dans le datagridview ( je sais pas cmt faire pr les afficher comme ya 3 tables différentes pr les auteurs :s). Donc je sélectionne une ligne (DataGridViewAlbums_CellClick....) dans cet événement, la procédure scenario() est appelé et ensuite celle ci  : ComboBox_Scenario_SelectedIndexChanged(). Le problème est

"Un DataReader associé à cette commande est déjà ouvert. Il doit d'abord être fermé." de la ligne Cmd.ExecuteNonQuery() de ComboBox_Scenario_SelectedIndexChanged().









Private





Sub

ComboBox_Scenario_SelectedIndexChanged(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

ComboBox_Scenario.SelectedIndexChangedposit = InStr(1, ComboBox_Scenario.Text,



","

, vbTextCompare)positSupAndInf = InStr(1, ComboBox_Scenario.Text,



"<"

, vbTextCompare)



If

posit <> 0


Then


nomScenario = Mid(ComboBox_Scenario.Text, 1, posit - 1)


PrenomScenario = Mid(ComboBox_Scenario.Text, posit + 2)


PseudoScenario =





""








ElseIf

positSupAndInf <> 0


Then


nomScenario = ComboBox_Scenario.SelectedItem


PrenomScenario =





""


PseudoScenario =





""








Else


nomScenario = ComboBox_Scenario.SelectedItem


PrenomScenario =





""


PseudoScenario = ComboBox_Scenario.SelectedItem








End





If 










Dim

Cmd


As





New

SqlCommand



With

Cmd.CommandText = (



"Select IdAuteur From Auteurs Where NomAuteur=('"

& nomScenario &


"') and PrenomAuteur = ('"

& PrenomScenario &


"') and PseudoAuteur = ('"

& PseudoScenario &


"') ;"

).CommandType = CommandType.Text

.Connection = MaConnectionSql



End





With



Cmd.ExecuteNonQuery()     ------------------------Problème--------------------


IdScenario = Cmd.ExecuteScalar


MessageBox.Show(IdScenario)








End





Sub
----------------------------------------------------------------------------------------------------------------------------------------------

Private
Sub DataGridViewAlbums_CellClick(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.DataGridViewCellEventArgs)
Handles DataGridViewAlbums.CellClick

Dim i
As
Integeri = DataGridViewAlbums.CurrentRow.Index

CBox_Serie.Text = DataGridViewAlbums.Item(0, i).Value

TextBox_Titre.Text = DataGridViewAlbums.Item(2, i).Value

TextBox_Titre.Text = TextBox_Titre.Text.Replace(

"'",
"''")
With cmd.CommandText " Select Numero, LibCollection, LibEditeur, NbPlanches, Format, A.IdBEL, DepotLegal, Cycle, ISBN, IdAlbum From Albums A, Collection C, serie S, Editeur E where A.IdCollection C.IdCollection and E.IdEditeur = A.IdEditeur and TitreAlbum = '" & TextBox_Titre.Text &
"' and S.Titre = '" & CBox_Serie.Text &
"' ".CommandType = CommandType.Text

.Connection = MaConnectionSql

End
Withcmd.ExecuteNonQuery()

Dim myReader
As SqlDataReader = cmd.ExecuteReader()

Do
While myReader.ReadTextBox_No.Text = myReader.GetInt32(0)

CBox_Collection.Text = myReader.GetString(1)

CBox_Editeur.Text = myReader.GetString(2)

TextBox_NbPlanches.Text = myReader.GetInt32(3)

CBox_Format.Text = myReader.GetString(4)

TextBox_BEL.Text = myReader.GetString(5)

TextBox_DepotLegal.Text = myReader.GetString(6)

TextBox_Cycle.Text = myReader.GetString(7)

TextBox_ISBN.Text = myReader.GetString(8)

IdAlbum = myReader.GetInt32(9)

TextBox_Titre.Text = TextBox_Titre.Text.Replace(

"''",
"'")

LoopmyReader.Close()

scenario()

End
Sub----------------------------------------------------------------------------------------------------------------------------------------------

Sub scenario()

Dim Scenario
As
String

Dim Cmd
As
New SqlCommand
With Cmd.CommandText " Select NomAuteur, PrenomAuteur From Albums A, Auteurs Au where IdAlbum " & IdAlbum & " and Au.IdAuteur A.IdScenario".CommandType CommandType.Text

.Connection = MaConnectionSql

End
WithCmd.ExecuteNonQuery()

Dim myReader
As SqlDataReader = Cmd.ExecuteReader()

Do
While myReader.Read()MessageBox.Show(myReader.GetString(0))

MessageBox.Show(myReader.GetString(1))

Scenario = myReader.GetString(0) &

", " & myReader.GetString(1)MessageBox.Show(Scenario)

ComboBox_Scenario.Text = Scenario

LoopmyReader.Close()

End
Sub

1 réponse

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
8 juil. 2009 à 21:30
Tes lignes cmd.ExecuteNonQuery ne servent absolument à rien.

ExecuteNonQuery est utilisé pour executer des requettes qui ne renvoient aucun résultat (requette UPDATE ou INERT par exemple)

Pour des requettes SELECT il afut utiliser soit ExecuteReader soit ExecuteScalar, qui elle ne renvoie que la premèire colonne de la première ligne du jeu de résultats

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
Rejoignez-nous