数据表选择返回的数组索引超出范围

时间:2012-07-23 20:27:22

标签: c# silverlight

这一行:

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

在C#中返回一个数组索引超出范围的异常。我怎么写这个不抛错误?或者,如果没有返回任何记录来继续执行代码,我是否有另一种方法可以写这个?我使用带有'i'的行作为表和字段名称的增量来搜索三个不同的表以获得结果。

3 个答案:

答案 0 :(得分:3)

这是不完整的,我们应该如何知道tableNumbersfieldNamewildcardedSearchString是什么?可能会在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的有效索引吗?

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