C# Datatable Select返回的数组索引超出范围

C# Datatable Select返回的数组索引超出范围,c#,silverlight,C#,Silverlight,这一行: searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["VALUE"] = wildcardedSearchString; 在C语言中返回数组索引越界异常。如何编写该异常以避免抛出错误?或者,如果没有返回任何记录以继续执行代码,是否有其他方法可以编写此代码?我使用“I”作为表名和字段名的增量,在三个不同的表中搜索结果。假设您的

这一行:

searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["VALUE"] = wildcardedSearchString;
在C语言中返回数组索引越界异常。如何编写该异常以避免抛出错误?或者,如果没有返回任何记录以继续执行代码,是否有其他方法可以编写此代码?我使用“I”作为表名和字段名的增量,在三个不同的表中搜索结果。

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

您在该语句中进行了大量的数组索引,因此很难说哪一个超出了范围。您确定我是TableNumber和fieldName的有效索引吗


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

您在该语句中进行了大量的数组索引,因此很难确定哪一行超出了范围。您确定我是TableNumber和fieldName的有效索引吗


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

这是不完整的,我们如何知道TableNumber、fieldName和wildcardedSearchString是什么?异常可能在select的tableNumbers[i]、fieldName[i]或[0]索引器中引发

我假设select不返回行,因此[0]将引发IndexOutOfBounds异常

您可以使用Steves方法或更具可读性和功能的Linq To数据集:

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();
}

这是不完整的,我们如何知道TableNumber、fieldName和wildcardedSearchString是什么?异常可能在select的tableNumbers[i]、fieldName[i]或[0]索引器中引发

我假设select不返回行,因此[0]将引发IndexOutOfBounds异常

您可以使用Steves方法或更具可读性和功能的Linq To数据集:

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();
}

是的,我是有效的。它在这篇文章中似乎无效:[0][VALUE]那么我猜您没有从数据库中获得任何行;因此,您将不会有第0行。当你没有结果时,你需要处理这个案子。是的,我是有效的。它在这篇文章中似乎无效:[0][VALUE]那么我猜您没有从数据库中获得任何行;因此,您将不会有第0行。当你没有结果的时候,你需要处理这个案子。谢谢史蒂夫,现在就尝试。谢谢史蒂夫,现在就尝试。