DataTable中选择返回数组索引越界
searchParamsTable.Select(string.Format("TABLE = {0} AND FIELD = '{1}'", tableNumbers[i], fieldName[i]))[0]["VALUE"] = wildcardedSearchString;
在C#中返回一个数组索引越界异常。我怎么写这个不会抛出错误?或者,如果没有记录被返回以继续执行代码,我是否可以使用另一种方法编写此代码?我用三个不同的表格搜索结果,使用'i'作为表格和字段名称的增量。
这是不完整的,我们应该怎么知道tableNumbers
,fieldName
和wildcardedSearchString
是什么?该异常可能会引发tableNumbers [i],fieldName [i]或select的[0]
索引器。
我假设select不返回行,所以[0]
会抛出IndexOutOfBounds
异常。
你可以使用施特费斯方法或使用LINQ到数据集是更具可读性和强大:
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();
}
假如你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;
感谢史蒂夫,现在正试图这样。 – CodeMan5000 2012-07-23 20:33:59
你是做了相当多的数组索引在该语句返回,那么到底是哪一个是出界很难说。你确定i
是tableNumbers和fieldName的有效索引吗?
尝试将声明分解成单独的行,然后使用调试器查明。
是的,我是有效的。这似乎是无效的这一块:[0] [“VALUE”] – CodeMan5000 2012-07-23 20:33:29
那么我想你没有从数据库中得到任何行;因此你不会有第0行。当你没有结果时,你需要处理这个案例。 – driis 2012-07-23 20:35:18
真的,我需要一个关于Linq的速成课程! - = – Steve 2012-07-23 20:38:30