Procédure stockée SQL SERVER 2000

seoi_nage Messages postés 3 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 20 août 2004 - 18 août 2004 à 00:17
seoi_nage Messages postés 3 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 20 août 2004 - 20 août 2004 à 23:26
Bonjour,

J'ai réalisé un petit programme qui exécute des procédures stockées SQL server 2000 depuis vbnet, là pas de problème.
Par contre, j'aimerais savoir s'il y a un moyen de retourner les messages de l'analyseur de requêtes SQL server dans vbnet.

Je débute et votre aide me sera précieuse, MERCI

Julie

4 réponses

sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
18 août 2004 à 09:37
Bonjour,

(il y a surement d'autre solutions mais c ce que j'utilise)

Dans tes procedures vb.net
private sub.....
try
'Execution de ta procedure stockée
catch
msgbox (Err.Description)
end try

end sub

Dans tes procédures stockées
j'utilise raiserror('ta phrase',16,1)
(vois la documentation de sqlserver pour plus d'infos)

Remarque : j'utilise cela pour la gestion des erreur

j'espere t'avoir aider

gs
0
seoi_nage Messages postés 3 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 20 août 2004
18 août 2004 à 18:47
Je te remercie sgrant d'avoir répondu à ma demande, mais ce n'est pas celle que j'attends. Toutefois ton astuce me servira surement dans d'autres circonstances.

Mea-culpa car ma question n'était peut être pas assez précise:
j'aimerais obtenir, lorsque j'exécute une procédure stockée via vbnet, le nombre de lignes affectées à l'action des SELECT, INSERT...qui se trouvent dans la procédure (sans modifier les procédures stockées).

Exemple pour une procédure stockée ou il y aurait deux INSERT à l'intérieur et après l'exécution de cette dernière dans l'anlyseur de requête, on voit dans la partie message :

10 ligne(s) affectée(s)

3 ligne(s) affectée(s)

se sont ces messages que je cherche à récupérer

seoi
0
sgrant Messages postés 89 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 13 mai 2005 1
19 août 2004 à 10:17
g regardé un peu pas trouve

si cela peut aider :

@@rowcount permet de savoir le nombre ligne affecté (voir si tu peut pas faire quelque chose avec raisseeror)

ex :
insert.....

set @msg= @msg + convert (varchar(10),@@rowcount) + ' lignes insérée(s) ' + chr(10)

update.....

set @msg= @msg + convert (varchar(10),@@rowcount) + ' lignes sauvegardée(s) ' + char(10)

....

raiserror(@msg,16,1)

pour infos :
chr(10): retour à la ligne
set no count (on/off) : permet d'afficher ou pas les lignes

Desolé de ne pas plus t'aider

gs
0
seoi_nage Messages postés 3 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 20 août 2004
20 août 2004 à 23:26
MERCI sg de me consacrer une partie de ton temps...

J'ai un peu près trouvé ce que je voulais sans toucher aux procédures stockées. Ci-dessous une solution .net
C'est avec : nbAffect = sComm.ExecuteNonQuery()
que j'arrive à retourner le nombre de lignes affectées. Le seul problème si j'ai plusieurs INSERT,UPDATE...il me retourne le total c'est déjà pas mal mais j'aurais aimé qu'il me retourne le détail

voici ma solution, elle est surement loin dêtre parfaite mais je commence juste à mettre le nez dans .net. Si quelqu'un à une meilleur solution je reste ouverte...

Private Sub Connecte()

Dim sConn As New SqlClient.SqlConnection
Dim sComm As New SqlClient.SqlCommand
Dim chBase As String
Dim chLog As String
Dim chMdp As String
Dim chServeur As String
Dim nbAffect As Int32
Dim i As Integer

Cursor = Cursors.WaitCursor

chBase = cboBase.Text
chLog = txtLog.Text
chMdp = txtMdp.Text
chServeur = cboServer.Text
txtResul.Text = ""
Refresh()

sConn.ConnectionString = "Initial Catalog=" &chBase& ";Data Source=" & chServeur & ";User ID=" & chLog & ";Password=" & chMdp & ";"

Try
sConn.Open()
sComm.Connection = sConn
sComm.CommandTimeout = 300
sComm.CommandType = CommandType.Text
sComm.CommandText = txtProc.Text
sComm.ExecuteNonQuery()

nbAffect = sComm.ExecuteNonQuery()

If nbAffect < 1 Then
txtResul.Text = "Précédure exécutée !" &vbCrLf&vbCrLf & _
"Aucune(s) ligne(s) affectée(s) par cette procédure"
Else
txtResul.Text = "Opération réussie !" & vbCrLf & vbCrLf & _
nbAffect & " ligne(s) affectée(s)"
End If

Cursor = Cursors.Default
sConn.Close()

Catch sEcep As SqlClient.SqlException

For i = 0 To sEcep.Errors.Count - 1
MessageBox.Show("Index #" &i&ControlChars.NewLine & _
"Error: " & sEcep.Errors(i).ToString() &controlChars.NewLine, "Erreur connexion", MessageBoxButtons.OK, MessageBoxIcon.Error)
Next i
Cursor = Cursors.Default
sConn.Close()
Exit Sub
End Try

End Sub
0
Rejoignez-nous