Bonjour à tous,

Je travaille sous SQL2000 et C#. Mon problème est simple: quand j'execute une procédure stockée avec la méthode ExecuteReader, j'ai de gros problèmes de temps de performance (je me fais même jeter par le timeout) alors que quand j'execute la même requete depuis l'analyseur, elle s'execute en quelques secondes.

Voilà mon code:

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
 
      public static DataSet Execute(string strSQL, SqlParameterCollection args, String Table)
        {
            DataSet dataset = new DataSet();
            string NomTable = Table;
            SqlDataReader oReader;
            // oReader = null;
            try
            {
                string connectString = @"Server=monserveur;Initial Catalog=mabase;User Id=login;Password=passwd;";
                using (SqlConnection cn = new SqlConnection(connectString))
                {
                    cn.Open();
                    int i;
                    SqlCommand cmd = new SqlCommand(strSQL, cn);
                    for (i = 0; i < args.Count; i++)
                    {
                        cmd.Parameters.AddWithValue(args[i].ParameterName, args[i].Value);
 
                    }
 
                    cmd.CommandType = CommandType.StoredProcedure;
                    oReader = cmd.ExecuteReader(); //C'est sur cette instruction que c'est long!
                    i = 2; //numerotation des tables en cas de renvoi de plusieurs select par la procedure
                    while (oReader.IsClosed.Equals(false))
                    {
 
                        dataset.Load(oReader, LoadOption.PreserveChanges, NomTable);
                        NomTable = Table + i.ToString();
                        i++;
                    }
                    cn.Close();
                    cmd.Dispose();
                    oReader.Dispose();
                }
            }
            catch (Exception e)
            {
                //gestion
            }
            return dataset;
        }
J'ai passé un moment à chercher et ai essayé plusieurs solutions mais rien n'y fait pour le moment.

Merci d'avance pour votre aide.