L'index (basé sur zéro) doit être supérieur ou égal à zéro


117

Hey, je reçois toujours une erreur:

L'index (basé sur zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste d'arguments.

Mon code:

OdbcCommand cmd = new OdbcCommand("SELECT FirstName, SecondName, Aboutme FROM User WHERE UserID=1", cn);

OdbcDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    Name.Text = String.Format("{0} {1}", reader.GetString(0), reader.GetString(1));
    Aboutme.Text = String.Format("{2}", reader.GetString(0));
}

6
Vous avez transposé l'index de l'argument dans le lecteur avec l'index du paramètre dans l'instruction de format. Commutez 2 avec 0 dans votre Aboutme.Text = .
tvanfosson

9
String.Format n'utilise pas d'espaces réservés uniques par classe ni par solution. Il s'agit d'une chaîne à chaque fois que String.Format est appelé, veuillez donc ne pas l'augmenter à {2} en fonction de l'utilisation de {0} et {1}!
RichardTheKiwi

1
une raison pour laquelle vous utilisez ODBC par rapport au connecteur .NET?
Jon Black

2
Pourquoi utilisez-vous un string.formar pour cette ligne :) Aboutme.Text = String.Format ("{2}", reader.GetString (0)); vous pourriez. Aboutme.Text = reader.GetString (0);
Ivo

Réponses:


190

Votre deuxième String.Formatutilise {2}comme espace réservé, mais vous ne transmettez qu'un seul argument, vous devriez donc l'utiliser à la {0}place.

Change ça:

String.Format("{2}", reader.GetString(0));

Pour ça:

String.Format("{0}", reader.GetString(2));

23

Dans cette ligne:

Aboutme.Text = String.Format("{2}", reader.GetString(0));

Le jeton {2} n'est pas valide car vous n'avez qu'un seul élément dans les paramètres. Utilisez plutôt ceci:

Aboutme.Text = String.Format("{0}", reader.GetString(0));

8

Changez cette ligne:

Aboutme.Text = String.Format("{0}", reader.GetString(0));

4

Cela peut également se produire lorsque vous essayez de lancer un ArgumentExceptionoù vous appelez par inadvertance la ArgumentExceptionsurcharge du constructeur

public static void Dostuff(Foo bar)
{

   // this works
   throw new ArgumentException(String.Format("Could not find {0}", bar.SomeStringProperty));

   //this gives the error
   throw new ArgumentException(String.Format("Could not find {0}"), bar.SomeStringProperty);

}

2

String.Format doit commencer par zéro index "{0}" comme ceci:

Aboutme.Text = String.Format("{0}", reader.GetString(0));

1
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Enter Your FirstName ");
            String FirstName = Console.ReadLine();

            Console.WriteLine("Enter Your LastName ");
            String LastName = Console.ReadLine();
            Console.ReadLine();

            Console.WriteLine("Hello {0}, {1} ", FirstName, LastName);
            Console.ReadLine();

        }
    }
}

Image


1
Ici, quand j'exécute cette requête. En ligne de commande, il n'imprime pas la dernière ligne comme "Hello Parag Patel" mais il affiche une erreur "System.FormatException s'est produite Message = Index (basé sur zéro) doit être supérieur ou égal à zéro et inférieur à la taille de l'argument liste."
parag

Il doit s'agir de Console.WriteLine ("Bonjour {0}, {1}", Prénom, Nom);
Fenrir88

@ Fenrir88, corrigé
jt000 le

0

Changez cette ligne:

Le 2 doit être égal à 0. Chaque décompte commence à 0.

//Aboutme.Text = String.Format("{2}", reader.GetString(0));//wrong

//Aboutme.Text = String.Format("{0}", reader.GetString(0));//correct

0

Dans mon cas, je n'ai pas pu voir l'erreur "+ nom" . Le compilateur ne rapporterait pas d'erreur dans ce cas. Alors fais attention.

//Wrong Code:

string name="my name";
string age=25;
String.Format(@"Select * from table where name='{1}' and age={1}" +name, age);


//Right Code:

string name="my name";
string age=25;
String.Format(@"Select * from table where name='{1}' and age={1}" , name, age);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.