Pb:2 connexions simultannées sur sql server

peemawai Messages postés 9 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 12 juillet 2004 - 4 sept. 2003 à 22:56
peemawai Messages postés 9 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 12 juillet 2004 - 5 sept. 2003 à 10:57
J'ai une page asp.net en Vb.net qui contient deux conenction simultannées sur une base sql server. le résultat d'une requete aliment les condition d'une autre. tout fonctionne bien avec un seul utilisteur mais si on passe a deux sa bug et le résultat de la deuxieme requete me renvoi null. Quelqu'un sait comment faire des connection simaultannée sans pb?

2 réponses

nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
5 sept. 2003 à 10:08
Pourquoi créer n connections, avec une connection pour un user, tu peux faire plusieurs requetes.

Nickadele
0
peemawai Messages postés 9 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 12 juillet 2004
5 sept. 2003 à 10:57
C'est simple parce que sinon j'ai un message d'erreur i: exite deja un dtatareader associé a cette connexion. Je lance mes deux requete en meme tps et il y a confilt si c'est la meme connexion

voici le code :
Sub FillDataGrid()
'requete pour recuperer tous les info sur les cras de la semaie courante avec comme parametre la date de debut et de fin de la semaine
Dim strRequete As String = "SELECT CRA.NUM_LIGNE, PROJET.LIB_PROJET, PROCESS.LIB_PROCESS, ACTIVITE.LIB_ACTIVITE, CRA.COMMENT, CRA.DATE, CRA.NB_JOUR " & _
"FROM PROJET INNER " & _
"JOIN CRA ON PROJET.ID_PROJET = CRA.ID_PROJET " & _
"INNER JOIN PROCESS ON CRA.ID_PROCESS = PROCESS.ID_PROCESS " & _
"INNER JOIN ACTIVITE ON CRA.ID_ACTIVITE = ACTIVITE.ID_ACTIVITE " & _
"where CRA.DATE >= CAST('" & Session("date_deb") & "' AS smalldatetime) AND CRA.DATE<= CAST('" & Session("date_fin") & "' AS smalldatetime) and CRA.IDENT='" & Session("Nom") & "' ORDER BY CRA.NUM_LIGNE"
'totaux par semaine
Dim sum_lun As Decimal = 0
Dim sum_mar As Decimal = 0
Dim sum_mer As Decimal = 0
Dim sum_jeu As Decimal = 0
Dim sum_ven As Decimal = 0
Dim sum_sam As Decimal = 0
'total par triplet projet-process-activité et global
Dim sum_total As Decimal = 0

'definition de la requete
Dim MyQuery As SqlCommand = New SqlCommand(strRequete, SqlConnection1)
'mise en place du conteneur de requete
Dim tmpReader As SqlDataReader
'ouverture de la connection à la base
SqlConnection1.Open()
'remplissage du conteneur
tmpReader = MyQuery.ExecuteReader

'definition d'une table temporaire qui permettra de remplir la table affichée à l'écran
Dim MaTable As DataTable = New DataTable()
Dim myColumn As DataColumn = New DataColumn()
Dim myRow As DataRow

'definitionde toutes les colonnes de la table temporaire
myColumn.DataType = System.Type.GetType("System.Int32")
myColumn.AllowDBNull = False
myColumn.Caption = "N°ligne"
myColumn.ColumnName = "N°ligne"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.String")
myColumn.Caption = "Libellé Projet"
myColumn.ColumnName = "Libellé Projet"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.String")
myColumn.Caption = "Libellé Process"
myColumn.ColumnName = "Libellé Process"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.String")
myColumn.Caption = "Libellé Activité"
myColumn.ColumnName = "Libellé Activité"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.String")
myColumn.Caption = "Commentaire(s)"
myColumn.ColumnName = "Commentaire(s)"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Lun."
myColumn.ColumnName = "Lun"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Mar."
myColumn.ColumnName = "Mar"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Mer."
myColumn.ColumnName = "Mer"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Jeu."
myColumn.ColumnName = "Jeu"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Ven."
myColumn.ColumnName = "Ven"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Sam."
myColumn.ColumnName = "Sam"
MaTable.Columns.Add(myColumn)

myColumn = New DataColumn()
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.Caption = "Total"
myColumn.ColumnName = "Total"
MaTable.Columns.Add(myColumn)

' Mydate permet de stoquer la date récupérée à partir de la requete
Dim MyDate As DateTime
'on stoquera temporairement le numero de ligne pour permettre l'affichage sur la meme ligne des activité équivalentes
Dim i As Integer = 0

'tant que le conteneur n'est pas vide
While tmpReader.Read
'definition d'une nouvelle ligne
myRow = MaTable.NewRow()
'recuperation des champs d'un ligne du conteneur
myRow("N°ligne") = tmpReader.GetValue(0)

'definition d'un requete et d'un connection pour calculer le nombre de ligne par N°ligne et ainsi les affiché sur uneul et même ligne
SqlConnection2.Open()
Dim tmpCountReader As SqlDataReader
Dim strCountRequete As String = "select count(NUM_LIGNE) From CRA where NUM_LIGNE='" & tmpReader.GetValue(0) & "'AND CRA.DATE >= CAST('" & Session("date_deb") & "' AS smalldatetime) AND CRA.DATE<= CAST('" & Session("date_fin") & "' AS smalldatetime)"
Dim MyCountQuery As SqlCommand = New SqlCommand(strCountRequete, SqlConnection2)

tmpCountReader = MyCountQuery.ExecuteReader

myRow("Libellé Projet") = tmpReader.GetString(1)
myRow("Libellé Process") = tmpReader.GetString(2)
myRow("Libellé Activité") = tmpReader.GetString(3)
myRow("Commentaire(s)") = tmpReader.GetValue(4).ToString
'remise à zéro du total par ligne
sum_total = 0
'si la requete renvoi des résultats, on boucle sur le nombre de ligne par num_ligne pour la période en cours
If tmpCountReader.Read Then
i = 1
While i <= tmpCountReader.GetValue(0)
'on stoque la date
MyDate = tmpReader.GetValue(5)

'cas selon que cette date soit le lun,mar,mer....
'suivant les cas on ne rempli pas la meme colonne
Select Case MyDate.DayOfWeek
Case 1
myRow("Lun") = tmpReader.GetValue(6)
sum_lun = sum_lun + tmpReader.GetValue(6)
Case 2
myRow("Mar") = tmpReader.GetValue(6)
sum_mar = sum_mar + tmpReader.GetValue(6)
Case 3
myRow("Mer") = tmpReader.GetValue(6)
sum_mer = sum_mer + tmpReader.GetValue(6)
Case 4
myRow("Jeu") = tmpReader.GetValue(6)
sum_jeu = sum_jeu + tmpReader.GetValue(6)
Case 5
myRow("Ven") = tmpReader.GetValue(6)
sum_ven = sum_ven + tmpReader.GetValue(6)
Case 6
myRow("Sam") = tmpReader.GetValue(6)
sum_sam = sum_sam + tmpReader.GetValue(6)
End Select
'calcul du total par ligne
sum_total = sum_total + tmpReader.GetValue(6)
i = i + 1
'condition qui poermet d'éviter ne passer à la prochaine ligne du conteneur de requete si on a deja atteind le nombre de ligne comptées
If i <= tmpCountReader.GetValue(0) Then
tmpReader.Read() 'on passe à la ligne suivante
End If
End While
End If
'fermeture et libération de la connection et du conteneur
tmpCountReader.Close()
SqlConnection2.Close()
'ajout du champ dans la colonne total (par ligne)
myRow("Total") = sum_total
'ajout de la ligne définie au tableau temporaire
MaTable.Rows.Add(myRow)
End While

'La source de la table affiché à l'écran est la table temporaire
dgData.DataSource = MaTable
'remplissage de la table affichée à l'écran
dgData.DataBind()
'fermeture et liberation des connexions
tmpReader.Close()
SqlConnection1.Close()

End Sub
0
Rejoignez-nous