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'作爲表格和字段名稱的增量。
這是不完整的,我們應該怎麼知道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