2012-06-06 2 views
0

DataRow를 사용하여 행의 레코드를 가져 오려고합니다. 여기에 지금까지 한 일이다 : "username"DataRow를 사용하여 행에서 레코드 얻기

Cannot implicitly convert type 'string' to 'int'

오류 지점 :

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

그런 다음 나는 오류가 발생했습니다. 문자열 변수에 문자열 변수를 지정하려고했기 때문에 무엇이 잘못되었는지 알지 못합니다. 누구든지 오류의 원인을 파악합니다. 제발 도와 줘서 고마워. 컴파일러는 그 인덱스에 대한 int을 필요로 할 때 당신이 문자열을 전달 뿌려 그 때문에

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

어떤 종류가'userID' 및'uID' 열입니까? – ivowiblo

답변

3

dr으로

+0

문제는 쿼리가 실행될 때 발생합니다. – ivowiblo

+0

@ivowiblo : 문제는 OP가 DataAdapter에 이미 id를 전달했기 때문에 OP에 실제로 하나의 DataRow가있는 DataTable이 있다는 것입니다. 따라서 '선택'은 중복되는 것처럼 보입니다. 그는 첫 번째/단일 행의'username' 필드를 가져 가면됩니다. –

+0

선생님, 당신은 절대적으로 옳습니다. – ivowiblo

4

변경 다음 문

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

DataRow[] 아닌 DataRow입니다.

사실 DataTable에 단일 DataRow의 사용자 이름이 필요합니다. 맞습니까?

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

DataTable에 행이 두 개 이상있는 경우 예외가 발생합니다. 그러나 ID를 DataAdapter에 전달 했으므로 레코드가 하나만 반환되어야한다고 가정합니다.

+0

최소한 포스터에 대한 간단한 설명을 제공하십시오 ..... – Botonomous

+0

문제는 쿼리가 "uID"문자열과 userID 열을 비교하려고하는 것입니다. uID의 값을 포함하는 표현식을 작성해야합니다. 따라서 uID = 4이면 표현식은 "userID = 4"가됩니다. 이렇게하면 해결됩니다. – ivowiblo

+0

@Anon, 업데이트 됨 –

1

두 가지 문제가있는 것으로 보입니다. 하나는 Asif가 uID가 "userId ="+ uID (uID를 문자열로 캐스팅해야 함)이고 Tim이 지적한 바와 같이 dr이 datarows의 배열임을 제안합니다. Dr [0] [ "userName"]. ToString()

관련 문제