1

この行:

searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["VALUE"] = wildcardedSearchString;

C# で範囲外の配列インデックス例外を返します。エラーをスローしないようにこれを書くにはどうすればよいですか? または、コードの実行を続行するためにレコードが返されない場合、これを書くことができる別の方法はありますか? テーブル名とフィールド名の増分として「i」を含む行を使用して、3 つの異なるテーブルから結果を検索します。

4

3 に答える 3

3

tableNumbersこれは不完全です。何が であり、であるかをどのように知る必要がfieldNameありwildcardedSearchStringますか? 例外は、おそらく tableNumbers[i]、fieldName[i]、または[0]選択のインデクサーでスローされます。

選択は行を返さないと想定しているため、例外[0]がスローされ ます。IndexOutOfBounds

Steves アプローチを使用するか、より読みやすく強力な Linq-To-Dataset を使用できます。

IEnumerable<DataRow> rows = searchParamsTable.AsEnumerable()
                         .Where(r => r.Field<String>("TABLE") == tableNumbers[i] 
                                 &&  r.Field<String>("FIELD ") == fieldName[i]);
if(rows.Any())
{
    // do something with the rows, for example create a new DataTable from the result:
    DataTable tblSearch = rows.CopyToDataTable();
}
于 2012-07-23T20:35:16.353 に答える
2

インデックス var が正しいと仮定するとi、Select ステートメントから行が返されるかどうかを確認する必要があります

DataRow[] rows = searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", 
                 tableNumbers[i], fieldName[i]));

if(rows.Length > 0)
   rows[0]["VALUE"] = wildcardedSearchString;
于 2012-07-23T20:31:07.757 に答える
1

そのステートメントではかなり多くの配列のインデックス付けを行っているため、どれが範囲外であるかを正確に判断するのは困難です。itableNumbers と fieldName の両方への有効なインデックスは確かですか?

ステートメントを別々の行に分割してみてから、デバッガーを使用して調べてください。

于 2012-07-23T20:31:16.983 に答える