2013-03-13 2 views
0

테이블의 모든 데이터를 나열하려고하지만 첫 번째 행만 반환하며 전체 테이블을 반복하지 않습니다. ASMX 웹 서비스에서 사용할 것이기 때문에 데이터를 문자열로 반환해야합니다.SQL 테이블의 모든 데이터를 행 단위로 나열합니다.

하고 XML 스키마는 첫 번째 행

<String> data in row 1<String> 

내가 그것을 이런 식으로 뭔가를해야만 반환 할 반환 n 행에

<String> data in row 1<String> 
<String> data in row 2<String> 
<String> data in row 3<String> 

및 행 1 ....

VS2012 쿼리 작성기에서 SQL statment 테스트 한 거기에 잘 작동합니다. 그래서 모든 데이터를 한 방법으로 나열해야합니다. 여기

public String finAllCompaniesForSpesficuserByUserId(String userid) 
{ 
    List<String> l = new List<String>(); 
    try 
    { 
     String sql = "SELECT Companies.Name FROM UsersInCompanies INNER JOIN Companies ON UsersInCompanies.CompanyId = Companies.CompanyId WHERE UsersInCompanies.UserId ='" + userid + "'"; 
     con = new SqlConnection(cs); 
     cmd = new SqlCommand(sql, con); 

     DataTable table = new DataTable(); 
     SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
     adapter.Fill(table); 
     con.Open(); 

     dr = cmd.ExecuteReader(); 
     dr.Read(); 

     //while (dr.Read()) 
     //{ 
     // l.Add(dr["Name"].ToString()); 
     //} 

     foreach (DataRow row in table.Rows) 
     { 
      return row["Name"].ToString(); 
     } 
    } 
    finally 
    { 
     if (con != null) 
      con.Close(); 
    } 
    /* 
    foreach (string p in l) 
    { 
     return p; 

    } 
    */ 
    return null; 
} 

사람이 올바른 방향으로 날 지점 또는 나에게 예를 줄 수 내 코드인가?

+0

을 시도, 당신은 SQL 자신 => HTTP를 구성하여 SQL 인젝션 공격 벡터를 만들었습니다 .net/techtips/sql-injection.html – cfeduke

+0

이미 예제가 있습니다. 당신은 그것을 주석 처리했습니다. 각 행 데이터를 목록에 추가하십시오. 그런 다음 함수가 끝날 때 목록을 반환하십시오. 조숙 한 반환을 버리십시오. – musefan

+0

stringBuilder를 사용하여 직접 XML을 만드시겠습니까? 나는 희망하지 않지만, 묻고있다. – granadaCoder

답변

3
foreach (DataRow row in table.Rows) 
{ 
    return row["Name"].ToString(); 
} 

매우 첫 번째 반복에서 돌아옵니다.

+0

내 downvote .... 그냥 문제를 지적 해답에 대한 하나가 아니에요. 나에게 몇 가지 포인트를 원한다면, 문제를 해결하는 방법에 대한 예제를 제공해야한다. – musefan

+3

@musefan : 제발 해줘 요. 제 친구 프로그래머에게 도움이되는 포인트 친구가 필요하지 않습니다. – TalentTuner

+0

모든 생각은 이제 괜찮습니다. 내 안드로이드 장치 SOAP로 메시지를 resciving 및 ","로 spittet 항목으로 회 전자를 채우는. Whop whop. 내 하루 만들었 어! – user2053451

1

대신에 대한 - 루프 A yield 문을 사용 중 하나를 즉시 반환하는 (그리고 IEnumerable<String>에 반환 형식을 변경 - 이는 단지 함수의 밖으로 for 루프를 이동하고 다른 곳에서) 또는 결과 문자열을 구축하기 위해 StringBuilder를 사용 . // unixwiz : 직접 당신이 현재 겪고있는 문제와 관련이없는 동안

StringBuilder sb = new StringBuilder(table.Rows.Count * 30); /* 30 is arbitrary */ 

foreach (DataRow row in table.Rows) 
{ 
    // yes 3 separate calls are correct 
    sb.Append("<String>"); 
    sb.Append(row["Name"].ToString()) 
    sb.Append("</String>\n"); 
} 

/* after closing, cleaning up */ 
return sb.ToString(); 
+0

정말 고마워, 지금은 잘 작동 해. :) 잠시 동안 그걸로 stuggle을 가지고있다! – user2053451

0

var temp= "<String>" + 
      string.Join("</String>\n<String>", dt.Rows.Cast<DataRow>().Select(x => x["Name"].ToString())) + 
      "</String>";