【问题标题】:Index (zero based) must be greater than or equal to zero索引(从零开始)必须大于或等于零
【发布时间】:2011-07-16 01:01:34
【问题描述】:

嘿,我一直收到错误消息:

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

我的代码:

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

【问题讨论】:

  • 您将阅读器中的参数索引与格式语句中的参数索引进行了调换。在Aboutme.Text = 中用 0 切换 2。
  • String.Format 不使用每个类或每个解决方案的唯一占位符。每次调用 String.Format 时都是每个字符串,所以请不要根据已使用的 {0} 和 {1} 将其增加到 {2}!
  • 您使用 ODBC 与 .NET 连接器的任何原因?
  • 你为什么在这一行使用 string.formar :) Aboutme.Text = String.Format("{2}", reader.GetString(0));你可以。 Aboutme.Text =reader.GetString(0);

标签: c# asp.net mysql sql


【解决方案1】:

您的第二个String.Format 使用{2} 作为占位符,但您只传入一个参数,因此您应该改用{0}

改变这个:

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

到这里:

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

【讨论】:

    【解决方案2】:

    在这一行:

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

    令牌 {2} 无效,因为您的参数中只有一项。改用这个:

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

    【讨论】:

      【解决方案3】:

      改变这一行:

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

        【讨论】:

          【解决方案5】:

          String.Format 必须以零索引“{0}”开头,如下所示:

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

          【讨论】:

            【解决方案6】:

            改变这一行:

            2 应该是 0。每个计数都从 0 开始。

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

            【讨论】:

              【解决方案7】:
              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();
              
                      }
                  }
              }
              

              【讨论】:

              • 在这里,当我运行这个查询时。在命令行中,它不会像“Hello Parag Patel”那样打印最后一行,但它显示错误“System.FormatException发生消息=索引(基于零)必须大于或等于零且小于参数的大小列表。”
              • 应该是 Console.WriteLine("Hello {0}, {1} ", FirstName, LastName);
              • @Fenrir88,已修复
              猜你喜欢
              • 2016-07-02
              • 2018-05-24
              • 2012-12-29
              • 2011-12-19
              • 2011-04-18
              • 2013-09-26
              • 2016-07-03
              • 2023-04-11
              相关资源
              最近更新 更多