Récupération le résultat d'une requete Sql Server sous DotNet

Signaler
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017
-
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017
-
Bonjour,

J'ai un problème, si je peux trouver une issue de sortie. Je travaille sous Visual Studio 2008. J'ai une requête SQL Server qui fait Appel à une fonction, qui est dans la base des données. La fonction s'exécute, mais le problème qui se pose ce que je tiens à récupérer le résultat de la fonction pour l'utiliser dans la suite de l'exécution de mon application. Please, je ne parviens pas à récupérer le résultat de ma fonction. Voici le brun de mon code

Sub Converse()
Cdf_Code = "$"
Dim Montant As Double
DatOper = String.Format("{0}-{1}-{2}", Microsoft.VisualBasic.Right(date_Operation.Text, 4), Microsoft.VisualBasic.Mid(date_Operation.Text, 4, 2), Microsoft.VisualBasic.Left(date_Operation.Text, 2))
Dim fct_Devis As New SqlCommand(String.Format(" dbo.fct_Devise '{0}','{1}'", DatOper, Cdf_Code), Cnx)
If Cnx.State = ConnectionState.Closed Then
Cnx.Open()
End If
Try
fct_Devis.ExecuteNonQuery()
'Je veux récupérer le résultat de cette fonction dans une variable
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
End Try
End Sub

3 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
d'abord

Dim fct_Devis As New SqlCommand(String.Format(" dbo.fct_Devise '{0}','{1}'", DatOper, Cdf_Code), Cnx) 


je ne vois pas de requete sql ici (smiley tete confus)
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Bonjour. Loin de moi le soucis de vous fâcher, franchement je m'excuse. Au fait la ligne en question me permet d'envoyer à ma fonction qui est sur la base des Données. S'il faut écrire la requête SQL directement dans mon code je n'aurais pas tant de problème parce que je le fais souvent, mais ici, je voulais juste ramener tout au niveau de la base des données et qu'à partir de mon code j'ai juste à appeler les différentes procédures stockées ou fonction sur ma base.
Donc cette ligne me permet juste d'envoyer à ma fonction des paramètres.
Une fois de plus je m'excuse beaucoup pour ce dérangement. Merci beaucoup pour votre disponibilité de temps. Je pense dans tout çà que c'est peut être moi qui pose mal le problème.
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Mais dans tout çà je dois faire de mon mieux pour bien présenter le problème.

Sub Devise()
Dim Devise_Adaptator As New SqlDataAdapter(String.Format("Select * From dbo.Cours_Change Where Reference='{0}' And Date_Taux =convert(datetime,'{1}',103)", Cdf_Code, Me.date_Operation.Text), Cnx)
Try
Dim Devis_Set As New DataSet("Cours_Change")
Devise_Adaptator.Fill(Devis_Set, "Cours_Change")
If Devis_Set.Tables(0).Rows.Count > 0 Then
Me.Montant_Devise.Text = Format(CDbl(Me.Montant_Cdf.Text) / (Devis_Set.Tables(0).Rows(0).Item("Taux")), "####0.00")
Me.Motif_Operation.Focus()
Else

End If
Catch ex As Exception
MsgBox(ex.Message.ToString)
Finally
End Try
End Sub

Ceci est une procédure que j'utilise et qui me donne satisfaction. Seulement je veux que tout ceci se passe sur la base des données et au retour j'ai besoin de garnir une variable de la valeur de traitement. C'est comme çà que j'ai créé une fonction que je garni par cette ligne
Dim fct_Devis As New SqlCommand(String.Format(" dbo.sp_Devise '{0}','{1}'", DatOper, Cdf_Code), Cnx)
Tout ceci dans l'attente d'une réponse après traitement, c'est malheureusement ce que je ne parviens pas à obtenir.
Donc mon problème, ce que je veux pour tout ce qui est traitement lié à la base des données soit fait directement sur la base et au retour je me contente seulement de la réponse pour continuer l'exécution de mon application. Merci, je pense être clair cette fois ci. Une fois encore merci Beaucoup.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Non pas du tout faché

je ne connais pas les procedures stockées

après avoir regardé dans des tutoriels
une simple question ou écris tu la procedure stocké ?
dans la class du vb.net ?
donc tu as une stored procedure avec des parametres
CREATE PROCEDURE BLABLA param1 , param2
pour appeler ta procedure

EXEC BLABLA param1 = , param2 =

http://www.mssqltips.com/sqlservertutorial/162/how-to-create-a-sql-server-stored-procedure-with-parameters/
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

J'écris la procédure, mais pas dans la Class Net. je le fais directement sur la base des données et dans DotNet je prends seulement le soin de lui envoyer les paramètres et me servir enfin de la résolution.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut
Pas compris
si fct_Devis.ExecuteNonQuery() donc elle ne retourne aucune
réponse non ?
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
ExecuteNonQuery convient à une requete insert;update,delete
donc elle ne rend aucune valeur si
retourne le nombre de lignes affectées.
http://msdn.microsoft.com/fr-fr/library/system.data.sqlclient.sqlcommand.executenonquery.aspx?cs-save-lang=1&cs-lang=vb
quelle réponse attends tu de fct_Devis.ExecuteNonQuery()
possible que je n'ai pas compris ce que tu demandes
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Salut. je m'excuse pour ce qui peut paraitre un dérangement et plus encore Merci pour l'éclaircissement à propos de l'utilisation de ExecuteNonQuery. Mais quand je recours à SqlDataReader , le message que j'ai par contre , c'est qu'il n y a pas de lignes affectées. Au fait mon problème, c'est de récupérer le résultat de ma requête pour utilisation dans la suite de mon application.
Pour etre clair, comment récupérer le Return , dans mon application DotNet, d'une fonction logée sur ma base SqlServer. Merci une fois encore pour la disposition.
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Je comprends bien qu'avec executeNonQuery, mais comment recevoir de l'exécution de ma fonction le résultat de son traitement?? Merci d'avance pour votre disponibilité.
je ne sais pas en plus si mon problème est mal posé.
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Je viens seulement de comprendre qu'avec executeNonQuery et autres ExecuteReader je ne suis pas tiré d'affaire.
Je veux affecter le résultat de ma requête dans une variable pour utilisation. Comment alors Exécute cette requête dans l'espoir que le résultat de son traitement me soit retourné.
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Cette discussion n'a pas été vaine car je viens d'atteindre l'objectif. Mon problème est résolu, j'ai le résultat escompté. Au fait le problème ce que je ne disposais pas d'une variable pour récupérer le résultat en occurrence Un objet qui gère cet état de chose. Franchement merci énormément. Avec ce grand pas qui n'est pas un je me dois de plus me concentrer sur le traitement directement sur la base des données. Promis. En passant si vous avez un lien qui parle plus sur les procédures Stockées, Fonctions et autres Triggers.
Merci pour votre disponibilité.
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014

Bonjour, si tu n'as qu'une donnée, un ExecuteScalar() fera l'affaire, sinon utilise un SqlDataReader avec l'aide d'un ExecuteReader().

ExecuteNonQuery() permet d'executer un requête, et retourne uniquement le nombre de lignes affectées
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Merci pour la réponse. J'ai déjà utilisé SqlDataReader avec ExecuteReader bien sur, mais je ne parviens pas à récupérer , dans mon application DotNet,le Return de ma fonction logée dans ma Base SqlServer. Donc la fonction n'est pas dans mon application,mais dans la base et mon application ne fait que l'executer dans le but de récupérer le résultat. Mais en utilisant SqlDataReader, j'ai un message d'erreur comme quoi aucune ligne affectée, ce qui est normale car ma fonction consulte et prend les informations dans la table. Et c'est de cette information que j'ai bien besoin. Merci pour votre disponibilité.Je serai ravi d'avoir une issue de votre part.
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014

Même si ta fonction est sur ta base SQL, je ne vois pas pourquoi tu ne pourrais pas récuperer la valeur dans un objet .NET ...

Montre nous un code autre que celui que tu as posté...
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Cette discussion n'a pas été vaine car je viens d'atteindre l'objectif. Mon problème est résolu, j'ai le résultat escompté. J'ai péché par le fait de ne pas avoir le problème en terme d'Objet Net qui récupèrerait le résultat. Au fait le problème ce que je ne disposais pas au préalable d'une variable pour récupérer le résultat en occurrence Un objet qui gère cet état de chose. Franchement merci énormément. Avec ce grand pas qui n' en est pas un je me dois de plus me concentrer sur le traitement directement sur la base des données. Promis. En passant si vous avez des liens qui parlent plus sur les procédures Stockées, Fonctions et autres Triggers.
Merci pour la disponibilité.
Messages postés
20
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
20 juin 2017

Merci pour cet échange qui m'a aidé et je suis content de vous annoncé que je suis parvenu. Le grand problème ce que je devais récupérer le résultat du traitement de ma fonction dans un Objet .Net. En occurrence un DataReader. Et quand j'ai fait çà, j'ai eu le résultat. Il m'a fallu cet échange pour amener un peu d'éclaircissement dans ce que je fais. Merci beaucoup bien que ce n'est pas suffisant, le mot Merci.