【问题标题】:Index was outside the bounds of the array while reading from excelsheet从 excel 工作表读取时,索引超出了数组的范围
【发布时间】:2012-11-01 09:56:24
【问题描述】:

我正在将 excelsheet 导入 sqlserver 数据库,但 excel 中有三列:

id|data|passport

我想确保所有护照都以我收到的字母开头 错误:

if (a[0]>= 'A' && a[0] <= 'Z' && a[0] !='0' )

错误:

索引超出了数组的范围。

          for (int i1 = 0; i1 < dt7.Rows.Count; i1++)
            {

                if (dt7.Rows[i1]["passport"]==null)
                {
                    dt7.Rows[i1]["passport"] = 0;

                }

                string a = Convert.ToString(dt7.Rows[i1]["passport"]);

                //char a1 = a[0];

                if (a[0]>= 'A' && a[0] <= 'Z' && a[0] !='0' )
                {
                    Label12.Text = "CAPITAL";
                    break;
                }
                else
                {
                    Label12.Text = "notgood";


                    flag = flag + 1;

                }

【问题讨论】:

  • 使用断点并得到 dt7.Rows[i1]["passport"] 的值为 "k526562"object {string}

标签: c# asp.net sql


【解决方案1】:

听起来a 引用了一个 数组,因此在索引0 处没有元素。在尝试访问第一个元素之前,您需要检查数组是否为空。

【讨论】:

  • 我使用断点并得到 dt7.Rows[i1]["passport"] 的值为 "k526562"object {string}
【解决方案2】:

过去,word 和 excel 范围内的对象肯定是基于 1 的数组,并且在访问索引 0 时会抛出超出范围的异常。我相信情况仍然如此。

也有可能,正如@anthony-grist 所说,数组为空,因此第一项将超出数组边界。

我建议你测试数组的长度,并从索引 1 开始访问。

【讨论】:

  • 请在问题中检查我的 eidt
【解决方案3】:

为什么不像这样修改你的条件

If(!String.IsNullOrEmpty(a)){
    If(Char.IsLetter(a[0])){
          Label12.Text = "CAPITAL";
          break;
    }
}

【讨论】:

  • 成功了!!谢谢 !!但我只是想知道如果我想让它检查大写字母怎么办?
  • 如果你想检查资本,你可以使用If(Char.IsLetter(a[0]) &amp;&amp; a[0] == a[0].ToUpper())
猜你喜欢
  • 1970-01-01
  • 2012-02-15
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
相关资源
最近更新 更多