인덱스 (0 기준)는 0보다 크거나 같아야합니다.


117

계속해서 오류가 발생합니다.

인덱스 (0 기준)는 0보다 크거나 같고 인수 목록의 크기보다 작아야합니다.

내 코드 :

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
형식 명령문의 매개 변수 색인으로 판독기의 인수 색인을 전치했습니다. 에서 0으로 2를 전환하십시오 Aboutme.Text = .
tvanfosson 2011 년

9
String.Format은 클래스 또는 솔루션별로 고유 한 자리 표시자를 사용하지 않습니다. String.Format이 호출 될 때마다 문자열 단위이므로 사용 된 {0} 및 {1}를 기준으로 {2}으로 늘리지 마십시오!
RichardTheKiwi 2011 년

1
ODBC 대 .NET 커넥터를 사용하는 이유는 무엇입니까?
Jon Black

2
이 행에 string.formar를 사용하는 이유 :) Aboutme.Text = String.Format ( "{2}", reader.GetString (0)); 당신은 할 수 있습니다. Aboutme.Text = reader.GetString (0);
Ivo

답변:


190

두 번째 String.Format{2}자리 표시 자로 사용되지만 하나의 인수 만 전달하므로 {0}대신 사용해야 합니다.

이것을 변경하십시오 :

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

이에:

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

23

이 줄에서 :

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

매개 변수에 항목이 하나만 있으므로 {2} 토큰이 유효하지 않습니다. 대신 사용 :

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

8

이 줄을 변경하십시오.

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

4

이는 ArgumentException실수로 ArgumentException생성자 오버로드를 호출 하는 위치 를 던지려고 할 때도 발생할 수 있습니다.

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은 다음과 같이 인덱스 "{0}"0으로 시작해야합니다.

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();

        }
    }
}

그림


1
여기에서이 쿼리를 실행할 때. 명령 줄에서 "Hello Parag Patel"과 같은 마지막 줄을 인쇄하지 않지만 "System.FormatException이 발생했습니다. Message = Index (0 기준)는 0보다 크거나 같고 인수의 크기보다 작아야합니다. 명부."
parag

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

@ Fenrir88, 고정
jt000

0

이 줄을 변경하십시오.

2는 0이어야합니다. 모든 카운트는 0에서 시작합니다.

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

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

0

제 경우에는 "+ name"이라는 실수를 볼 수 없었습니다 . 이 경우 컴파일러는 오류를보고하지 않습니다. 그러니 조심하세요.

//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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.