0

Excelシートをsqlserverデータベースにインポートしていますが、Excelには3つの列があります:

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;

                }
4

3 に答える 3

1

空のa配列を参照しているように聞こえるため、 index に要素がありません。最初の要素にアクセスする前に、配列が空でないことを確認する必要があります。0

于 2012-11-01T09:58:09.740 に答える
1

確かに、Word および Excel の範囲内のオブジェクトは 1 ベースの配列であり、インデックス 0 にアクセスすると範囲外の例外がスローされることがありました。これは今も変わらないと思います。

@ anthony-grist が言ったように、配列が空であるため、最初の項目が配列の範囲外になる可能性もあります。

配列の長さをテストし、インデックス 1 からアクセスを開始することをお勧めします。

于 2012-11-01T10:02:32.427 に答える
0

このように条件を変更してみませんか

If(!String.IsNullOrEmpty(a)){
    If(Char.IsLetter(a[0])){
          Label12.Text = "CAPITAL";
          break;
    }
}
于 2012-11-01T10:20:05.253 に答える