2012-06-06 24 views
0

我試圖使用DataRow獲取一行記錄。這是我到目前爲止已經完成:C# - 使用DataRow從一行獲取記錄

uID = int.Parse(Request.QueryString["id"]); 
PhotoDataSetTableAdapters.MembersTableAdapter mem = new PhotoDataSetTableAdapters.MembersTableAdapter(); 
PhotoDataSet.MembersDataTable memTable = mem.GetMemberByID(uID); 
DataRow[] dr = memTable.Select("userID = uID"); 
string uName = dr["username"].ToString(); 

然後我得到了錯誤:

Cannot implicitly convert type 'string' to 'int'

錯誤指向"username"。我不知道什麼是錯的,因爲我只是試圖將一個字符串變量賦值給一個字符串值。有人找出錯誤的原因嗎?請幫助和謝謝。

+0

哪些類型是userID和uID列? – ivowiblo

回答

3

drDataRow[]不是DataRow,爲此編譯器會抱怨你傳遞一個字符串時,他需要爲索引的int

你實際上想要DataTable中單個DataRow的用戶名,我說得對嗎?

String uName = memTable.AsEnumerable().Single().Field<String>("username"); 

請注意,如果DataTable中存在多行,則會引發異常。但是由於您將ID傳遞給DataAdapter,我認爲它應該只返回一條記錄。

+0

問題出現在查詢中,執行時。 – ivowiblo

+0

@ivowiblo:不,問題是OP實際上有一個DataRow的DataTable,因爲他已經將該ID傳遞給了DataAdapter。因此,「選擇」似乎是多餘的。他只需要使用第一行/單個行的「用戶名」字段。 –

+0

先生,你是絕對正確的。 – ivowiblo

4

更改下面的語句

DataRow[] dr = memTable.Select("userID = uID"); 

DataRow[] dr = memTable.Select("userID = "+ uID); 
+0

至少提供一個簡單的海報說明..... – Botonomous

+0

問題是,查詢試圖比較userID列與「uID」字符串。您需要創建一個包含uID值的表達式。所以,它uID = 4,表達式將是「userID = 4」。這將解決它。 – ivowiblo

+0

@Anon,它已更新 –

1

似乎有兩個問題。一個是Asif認爲uID應該是「userId =」+ uID(應該可以將uID作爲字符串),而dr是Tim指出的一系列數據行。您可以通過索引訪問它:dr [0] [「userName」]。ToString()