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