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));
}
G Gr
la source
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));
Ahmad Mageed
la source
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));
jfollas
la source
8

Changez cette ligne:

Aboutme.Text = String.Format("{0}", reader.GetString(0));
Mike Cole
la source
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);

}
SkeetJon
la source
2

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

Aboutme.Text = String.Format("{0}", reader.GetString(0));
Kashif Faraz
la source
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

parag
la source
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
SAAD K
la source
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);
criard
la source