索引(从零开始)必须大于或等于零


117

嘿,我不断出现错误:

索引(从零开始)必须大于或等于零且小于参数列表的大小。

我的代码:

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连接器的任何原因?
乔恩·布莱克

2
为什么在此行中使用string.formar :) Aboutme.Text = String.Format(“ {2}”,reader.GetString(0)); 你可以。Aboutme.Text = reader.GetString(0);
伊沃

Answers:


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


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

}


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(从零开始)必须大于或等于零且小于参数的大小清单。”
段落

它应该是Console.WriteLine(“ Hello {0},{1}”,FirstName,LastName);
Fenrir88 '19

@ 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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.