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 :
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
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
J'ai le message d'erreur suivant :
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()); } }
Help please
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()![]()
Partager