IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

récupérer un résultat d'une proc stockée dans un prog C#


Sujet :

Développement SQL Server

  1. #1
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut récupérer un résultat d'une proc stockée dans un prog C#
    Bonjour ici.

    Bon, j'ai cette procédure (SQL SERVER) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    ALTER PROCEDURE [dbo].[FillPAO]
     
    AS
     
    BEGIN
     
    	SELECT	dbo.OPCVM.[Code client] AS codcli,
    			dbo.Portfolio.code_opcvm AS codopcvm,
    			dbo.FormateChiffres(dbo.Portfolio.Nombre_de_titres) AS nbtitre,
    			dbo.Assemblée.[Code société] AS codsoc,
    			dbo.Assemblée.[Code assemblée] AS codass,
    			dbo.Assemblée.[Date de tenue d'assemblée] AS dateag
    	INTO #TempPosAg
    	FROM dbo.Assemblée INNER JOIN
             dbo.Société ON dbo.Assemblée.[Code société] = dbo.Société.[Code société] INNER JOIN
             dbo.Portfolio ON dbo.Société.[Code société] = dbo.Portfolio.Id_Societe INNER JOIN
             dbo.OPCVM ON dbo.Portfolio.code_opcvm = dbo.OPCVM.[N°OPCVM]
     
     
    	INSERT INTO [dbo].[Positions_AG_OPCVM]([code_assemblee],[N°OPCVM],[cli], [SharesatRecorddate], [MeetingWithShares])
    		SELECT codass, codopcvm, codcli, SUM(nbtitre), 1
    		FROM #TempPosAg WHERE (DATEDIFF(DAY, GETDATE(), dateag) = 3)
    		AND NOT EXISTS (SELECT [code_assemblee],[N°OPCVM],[cli] FROM [Positions_AG_OPCVM])
    		GROUP BY codass, codopcvm, codcli
     
    	SELECT @@ROWCOUNT
     
    END
    Je veux pouvoir récupérer le résultat du "SELECT @@ROWCOUNT" dans un programme (C#), lors de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int execproc = sqlcmd.ExecuteNonQuery();
    à l'heure actuelle, je ne récupère que le nombre de lignes traitées au total par la procédure (environ 68800), alors que l'insert n'en insère que 6.
    Qui peut me corriger ?
    j'ai même essayé d'envoyer plutôt une requète du genre EXEC FillPAO, SELECT @@ROWCOUNT (en retirant la ligne de la procédure, bien sûr)
    mais toujours même résultat : environ 68800 lignes au lieu des 6 ajoutées dans l'INSERT.

    P.S. : J'ose pas poster également dans C#, ça ferait doublon. A moins qu'un modo y mette un lien, svp.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Essai ExecuteScalar à la place d'ExecuteNonQuery
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    ou alors tu ajout un paramètre out à ta procédure
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  4. #4
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    Essai ExecuteScalar à la place d'ExecuteNonQuery
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execproc =Convert.ToInt32(sqlcmd.ExecuteScalar());
    Conversion obligé, apparemment...

    Citation Envoyé par BenoitM Voir le message
    ou alors tu ajout un paramètre out à ta procédure
    out ? j'ai déjà essayé un RETURN, mais ça marche toujours pas.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Oui ExecuteScalar renvoi Object
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  6. #6
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Pourquoi utiliser une table temporaire alors que vous pouvez le faire en 1 seule requête (et donc compter le bon nombre de lignes) ?

    De plus, il y a quelque question sur votre code à voir ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    INSERT INTO [dbo].[Positions_AG_OPCVM](
    	[code_assemblee]
    	,[N°OPCVM]
    	,[cli]
    	,[SharesatRecorddate]
    	,[MeetingWithShares])
     
    SELECT 
    	asb.[Code assemblée]
    	, por.code_opcvm
    	, op.[Code client]
    	, SUM(dbo.FormateChiffres(por.Nombre_de_titres))
    	, 1
    FROM 
    	dbo.Assemblée asb	INNER JOIN
    	dbo.Société sct		ON asb.[Code société] = sct.[Code société] INNER JOIN
    	dbo.Portfolio por	ON sct.[Code société] = por.Id_Societe INNER JOIN
    	dbo.OPCVM op		ON por.code_opcvm = op.[N°OPCVM] 
     
    WHERE 
    	dateag = dateadd(day, -3, getdate()) -- Attention à un format date heure ou uniquement date ?
     
    -- Pour conversion à la journée si dateag est à la journée et non heure, min, sec. Valable en SQL 2008
    --	dateag = dateadd(day, -3, cast(getdate() as DATE)
    	AND NOT EXISTS 
    -- Ne manque-t-il pas quelque chose dans votre exists ? un filtre pour mettre en relation avec le reste de la requête ?		
    		(SELECT [code_assemblee],[N°OPCVM],[cli] FROM [Positions_AG_OPCVM])
     
    GROUP BY codass, codopcvm, codcli
     
     
    SELECT @@ROWCOUNT
    Alexandre Chemla - Consultant MS BI chez Masao

  7. #7
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Pourquoi ?
    Parce que cette procédure est lancée chaque jour. Donc, la table destination est susceptible de varier. Et je ne veux compter QUE ce qui vient d'être ajouté, pas ce que contient la table finale.
    Ensuite, vos remarques sur la date m'intéresse, j'avais effectivement un défaut d'arrondi (je pense) traduit par une variation de résultat dans la même journée. Mais j'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEDIFF(DAY, GETDATE(), dateag) = 3
    (la date d’aujourd’hui doit être inférieure de 3 jours à la dateag)
    Enfin, la dernière remarque, je répond non, il ne manque rien. ça marche parfaitement bien

  8. #8
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    pas de bol, DATE n'est pas un type reconnu par le système (SQL SERVER 2005 Express - j'y peux rien ! )

Discussions similaires

  1. Mettre le résultat d'une Proc Stock dans une variable
    Par zooffy dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/06/2008, 11h20
  2. Réponses: 3
    Dernier message: 28/08/2007, 15h21
  3. Réponses: 2
    Dernier message: 12/06/2006, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo