2012-07-23 58 views
1

這行:DataTable中選擇返回數組索引越界

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

在C#中返回一個數組索引越界異常。我怎麼寫這個不會拋出錯誤?或者,如果沒有記錄被返回以繼續執行代碼,我是否可以使用另一種方法編寫此代碼?我用三個不同的表格搜索結果,使用'i'作爲表格和字段名稱的增量。

回答

3

這是不完整的,我們應該怎麼知道tableNumbers,fieldNamewildcardedSearchString是什麼?該異常可能會引發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(); 
} 
+2

真的,我需要一個關於Linq的速成課程! - = – Steve 2012-07-23 20:38:30

2

假如你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; 
+0

感謝史蒂夫,現在正試圖這樣。 – CodeMan5000 2012-07-23 20:33:59

1

你是做了相當多的數組索引在該語句返回,那麼到底是哪一個是出界很難說。你確定i是tableNumbers和fieldName的有效索引嗎?

嘗試將聲明分解成單獨的行,然後使用調試器查明。

+0

是的,我是有效的。這似乎是無效的這一塊:[0] [「VALUE」] – CodeMan5000 2012-07-23 20:33:29

+1

那麼我想你沒有從數據庫中得到任何行;因此你不會有第0行。當你沒有結果時,你需要處理這個案例。 – driis 2012-07-23 20:35:18