J'ai une table et environ 20 colonnes qui contiennent plus de 5000 lignes. En ce moment, je veux afficher les 20 colonnes dans la console, et je suis arrivé à la troisième colonne et j'ai une erreur

System.FormatException: 'Index (zero based) must be greater than or equal to zero and less than the size of the argument list.'

Voici mon code:

using System;
using System.Data.SqlClient;

namespace DbToJSON
{
    class Program
    {
        static void Main(string[] args)
        {
            string constring = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Test;Integrated Security=True";
            string Query = "select * from AO_ASISTENCA";


            SqlConnection conDataBase = new SqlConnection(constring);
            SqlCommand cmd = new SqlCommand(Query, conDataBase);
            conDataBase.Open();
            using (SqlCommand command = new SqlCommand(Query, conDataBase))
            {

                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                       Console.WriteLine("{0}", reader.GetString(0));
                       Console.WriteLine("{0}", reader.GetString(1));
                       Console.WriteLine("{1}", reader.GetString(0));


                    }
                }
            }

        }

    }
}

Cette paix de code me fait une erreur

Console.WriteLine("{1}", reader.GetString(0));

Quand je change cela en

Console.WriteLine("{0}", reader.GetString(2));

N'importe qui peut me guider et me dire ce qui ne va pas. Peut-être que je fais quelque chose de mal, mais je ne peux pas comprendre ce qui ne va pas. Merci

-1
Xerror 4 nov. 2019 à 15:03

1 réponse

Meilleure réponse

La partie SQL est très bien, mais la chaîne de format est incorrecte:

Console.WriteLine("{1}", reader.GetString(0));

Le {1} dans la chaîne de format est fondamentalement le "deuxième espace réservé", mais il n'y en avait pas de premier. Ainsi, lorsque vous passez reader.GetString(0) (ou n'importe quelle valeur) pour placer le premier espace réservé, il n'y a pas un tel espace réservé.

Vous n'avez pas vraiment besoin d'une chaîne de formatage ici, puisque vous ne formatez rien. Sur chacune de vos lignes de sortie, vous pouvez simplement sortir la valeur de la chaîne:

Console.WriteLine(reader.GetString(0));
Console.WriteLine(reader.GetString(1));
// etc.

En général, vous utiliseriez une chaîne de formatage lorsque vous souhaitez formater la sortie dans une structure globale. Par exemple, vous pouvez remplacer vos lignes de sortie par quelque chose comme ceci:

Console.WriteLine("{0} - {1}", reader.GetString(0), reader.GetString(1));

Cela placerait ces deux valeurs dans ces deux espaces réservés de chaîne, créant une seule ligne de sortie avec les valeurs séparées par des espaces et un trait d'union.

0
David 4 nov. 2019 à 12:08