这一行:
searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["VALUE"] = wildcardedSearchString;
在C#中返回一个数组索引超出范围的异常。我怎么写这个不抛错误?或者,如果没有返回任何记录来继续执行代码,我是否有另一种方法可以写这个?我使用带有'i'的行作为表和字段名称的增量来搜索三个不同的表以获得结果。
答案 0 :(得分:3)
这是不完整的,我们应该如何知道tableNumbers
,fieldName
和wildcardedSearchString
是什么?可能会在tableNumbers [i],fieldName [i]或select的[0]
索引器处抛出异常。
我假设select不返回行,因此[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();
}
答案 1 :(得分:2)
假设您的i
索引var是正确的,那么您应该检查是否从Select语句返回任何行
DataRow[] rows = searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'",
tableNumbers[i], fieldName[i]));
if(rows.Length > 0)
rows[0]["VALUE"] = wildcardedSearchString;
答案 2 :(得分:1)
你在那个语句中做了很多数组索引,所以很难说出哪一个超出界限。您确定i
是tableNumbers和fieldName的有效索引吗?
尝试将语句分成单独的行,然后使用调试器查找。