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

Windows Forms Discussion :

[C#] Procédure stockée


Sujet :

Windows Forms

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Par défaut [C#] Procédure stockée
    Bonjour,

    Je dois lire un grand nombre d'enregistrements (500 000 /jour) dans une table, les insérer dans une autre tout en mettant à jour certains champs, pour cela je souhaite utiliser une procédure stockée :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    CREATE PROCEDURE [dbo].[sp_report] 
     
    AS
    SET NOCOUNT OFF
    BEGIN
    	DECLARE 
    	@date DATETIME,
    	@mag NVARCHAR(255),
    	@ref NVARCHAR(255),
    	@stockfj int,
    	@ventes int,
    	@sortiehventes int,
    	@vs1 int, 
    	@vs2 int,
    	@xs1 int,
    	@xs2 int
     
    INSERT INTO [Reports] ([Date], [Code Mag], [Code EAN], [Stocks FJ], [Ventes], [Sorties hors ventes])
    VALUES(@date, @mag, @ref, @stockfj, @ventes, @sortiehventes)
     
    SELECT @vs1 = SUM(Ventes)
    FROM [Reports]
    WHERE [Code EAN] = @ref AND [Code Mag] = @mag AND 
    ([Date] >= DATEADD([day], - 6, @date)) AND ([Date] <= @date)
    GROUP BY [Code Mag], [Code EAN]
     
    SELECT @vs2 = SUM(Ventes)
    FROM [Reports]
    WHERE [Code EAN] = @ref AND [Code Mag] = @mag AND 
    ([Date] >= DATEADD([day], - 13, @date)) AND ([Date] <= DATEADD([day], - 7, @date))
    GROUP BY [Code Mag], [Code EAN]
     
    SELECT @xs1 = SUM(Ventes)
    FROM [Reports]
    WHERE [Code EAN] = @ref AND [Code Mag] = @mag AND 
    ([Date] >= DATEADD([day], - 6, @date)) AND ([Date] <= @date) AND [Stocks FJ] <= 0
    GROUP BY [Code Mag], [Code EAN]
     
    SELECT @xs2 = SUM(Ventes)
    FROM [Reports]
    WHERE [Code EAN] = @ref AND [Code Mag] = @mag AND 
    ([Date] >= DATEADD([day], - 13, @date)) AND ([Date] <= DATEADD([day], - 7, @date)) AND [Stocks FJ] <= 0
    GROUP BY [Code Mag], [Code EAN]
     
    UPDATE [Reports]
    SET VGS1 = @vs1,  VGS2 = @vs2, XS1=@xs1, XS2=@xs2
    WHERE [Date] = @date AND [Code Mag] = @mag AND [Code EAN] = @ref
    RETURN @@ROWCOUNT
     
     
    END
    GO
    Je n'arrive pas à appeler correctement cette procèdure stockée pour la jouer sur toutes les lignes d'entrée de la table, ci après le code que je tente d'utiliser :
    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
    33
    34
    35
    36
    37
     
    	string sCmd = "SELECT * FROM LoadText";
    	SqlDataAdapter DA = new SqlDataAdapter(sCmd, sCnx);
    	DataSet DS = new DataSet();
    	DA.Fill(DS);
    	DataTable DT = DS.Tables[0];
    	SqlConnection sPCnx = new SqlConnection(sCnx);
    	SqlCommand PCmd = new SqlCommand("sp_report", sPCnx);
    	PCmd.CommandType = CommandType.StoredProcedure;
    	SqlParameter param1 = PCmd.Parameters.Add("@date", SqlDbType.DateTime, 8);
    	SqlParameter param2 = PCmd.Parameters.Add("@mag", SqlDbType.NVarChar, 255);
    	SqlParameter param3 = PCmd.Parameters.Add("@ref", SqlDbType.NVarChar, 255);
    	SqlParameter param4 = PCmd.Parameters.Add("@stockfj", SqlDbType.Int, 4);
    	SqlParameter param5 = PCmd.Parameters.Add("@ventes", SqlDbType.Int, 4);
    	SqlParameter param6 = PCmd.Parameters.Add("@sortiehventes", SqlDbType.Int, 4);
    	PCmd.Parameters.Add(new SqlParameter("@ROWCOUNT", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, (byte) 0, (byte) 0, "", DataRowVersion.Current, null));
    	foreach(DataRow DR in DT.Rows)
    	{
    		try 
    		{
    			progressBar1.PerformStep();
    			progressBar1.Refresh();
    			param1.Value = jourTraitement;
    			param2.Value = DR["CodeMag"];
    			param3.Value = DR["EAN"];
    			param4.Value = DR["DATA1"];
    			param5.Value = DR["DATA2"];
    			param6.Value = DR["DATA3"];
    			sPCnx.Open();
    			int compteur = (int) PCmd.ExecuteNonQuery();
    			sPCnx.Close();
    		}
    		catch (Exception CantInsert)
    		{
    			WriteLogs(CantInsert.ToString());
    		}
    	}
    J'ai le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    System.Data.SqlClient.SqlException: Procedure sp_report has no parameters and arguments were supplied.
       at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)
       at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
    Help please

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    les paramètres d'entrée ne sont pas déclarés au bon endroit...

    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
     
    CREATE PROCEDURE [dbo].[sp_report]
    (
       @date DATETIME,
       @mag NVARCHAR(255),
       @ref NVARCHAR(255),
       @stockfj int,
       @ventes int,
       @sortiehventes int
    )
     
    AS
    SET NOCOUNT OFF
    BEGIN
       DECLARE
       @vs1 int,
       @vs2 int,
       @xs1 int,
       @xs2 int 
    ...

  3. #3
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    En passant évites de nommer des colonnes avec des noms tels que DATE. C'est un mot réservé et meme si ca passe, c'est pas conseille. Surtout si un jour tu portes ton applic vers un autre sgbd

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Par défaut
    Citation Envoyé par Keihilin
    les paramètres d'entrée ne sont pas déclarés au bon endroit...
    ça marche merci :-), plus de plantage, juste de la lenteur mais je ne vois pas trop comment optimiser le truc ...

    Citation Envoyé par Ditch
    En passant évites de nommer des colonnes avec des noms tels que DATE.
    c'est vrai que j'aurai au moins pu évité dans la proc mais pour les tables c'est pas moi qui ai la main dessus :-(

    Encore merci.

  5. #5
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    C'etait dans les tables que je parlais. Pour le @date je ne pense pas que ca pause de probleme, quelque soit l'action effectuée dessus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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