Forum Clubic

C# tableau en escalier - Comment les initialiser dynaiquement ?

Bonjour tout le monde
Je suis entrain d’écrire dans ma classe une methode “mysql_query” et je voudrais retourner un tableau en escalier (tableau de tableau).
Le seul problème que je rencontre est l’initialisation de ce tableau !
J’obtient une exception NullReferenceException à chaque essai et c# me dit sa : Object reference not set to an instance of an object.

Je vous montre mon code pour que vous puissiez voire ou est le problème :

    public string[][] mysql_query(string query)
    {
        MySqlCommand com = new MySqlCommand(query, this.ConnectionRessource);
        MySqlDataReader dr = com.ExecuteReader();
        int nbr = 0;
        while (dr.Read())
        {
            nbr++;
        }
        dr.Close();

        string[][] request = new string[nbr][]; // déclaration du tableau (je ne sais pas comment l'initialiser dynamiquement !)

        MySqlCommand com2 = new MySqlCommand(query, this.ConnectionRessource);
        MySqlDataReader dr2 = com2.ExecuteReader();

        int j = 0;
        while (dr2.Read())
        {
            for (int i = 0; i < dr2.FieldCount; i++)
            {
                request[j]Idea [I] = dr2.GetString(i); // l'erreur intervient ici
            }
            j++;
        }
        dr2.Close();
        return request;
    }

Merci
@++
Jean ed

Je ne fais pas de C# mais ton erreur me parait normal, tu instancies bien une nouvelle chaine avec un premier new string mais il faut aussi que le tableau soit lui aussi instancié ou pointer vers un élément qui l’est déja.
Donc, ce que je ferais :


int j = 0;
while (dr2.Read())
{
for (int i = 0; i < dr2.FieldCount; i++)
{
  string tmp = dr2.GetString(i);
  request[j] = new tmp.length;
  request[j][i] = tmp;
}
j++;
}

Bonjour,
je pense aussi que c’est l’instanciation du tableau, mais je la mettrai plutôt ici et avec cette syntaxe:


int j = 0;
while (dr2.Read())
{
  request[j] = new string[dr2.FieldCount];
    for (int i = 0; i < dr2.FieldCount; i++)
    {
      string tmp = dr2.GetString(i);

      request[j][i] = tmp;
    }
  j++;
}

[/quote]
Tu instancie bien le 1er tableau qui contient d’autre tableaux, mais tu n’instanciais pas les tableaux contenus dans le 1er, et contenant les string
:slight_smile:

En effet, c’est mieux de l’instancier ainsi :ane: