1

这一行:

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

在 C# 中返回数组索引越界异常。我怎样才能写这个不抛出错误?或者,如果没有返回记录以继续执行代码,是否有另一种方法可以编写此代码?我使用带有“i”的行作为表和字段名称的增量在三个不同的表中搜索结果。

4

3 回答 3

3

这是不完整的,我们怎么知道tableNumbers和是什么?异常可能在 tableNumbers[i]、fieldName[i] 或select 的索引器处引发。fieldNamewildcardedSearchString[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

假设您的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

您在该语句中进行了大量的数组索引,因此很难准确判断哪个超出范围。您确定i是 tableNumbers 和 fieldName 的有效索引吗?

尝试将语句分成单独的行,然后使用调试器找出答案。

于 2012-07-23T20:31:16.983 回答