2013-03-13 1 views
0

Я пытаюсь перечислить все данные в таблице, но возвращает только первую строку, она не зацикливает всю таблицу. Мне нужно вернуть данные как строки, потому что я буду использовать их в веб-службе ASMX.Список всех данных в таблице sql, строка за строкой

И схема XML возвращает только первую строку

<String> data in row 1<String> 

я хочу его вернуть Somthing так:

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

и строку 1 до п строк ....

Я протестировал sql-элемент в VS2012 построителе запросов и там он отлично работает. , поэтому мне нужно точно указать все данные.

Вот мой код

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 инъекции атаки путем построения SQL самостоятельно => Http: // unixwiz .net/techtips/sql-injection.html – cfeduke

+0

У вас уже есть пример. Вы прокомментировали это. Добавьте каждую строку данных в список. Затем верните список в конце функции. Снимите преждевременные возвращения. – musefan

+0

Создаете ли вы свой собственный xml с помощью stringBuilder? Надеюсь, нет, но я спрашиваю. – granadaCoder

ответ

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

Вы возвращаетесь с самой первой итерации.

+0

my downvote .... им не один для ответов, которые просто указывают на проблемы. Если вам нужны какие-то очки от меня, вы должны привести пример того, как исправить проблему. – musefan

+3

@musefan: Пожалуйста, сделайте это. Мне не нужен какой-нибудь приятель, это просто помощь, которую я делаю своему коллеге-программисту. – TalentTuner

+0

Кажется, что сейчас все хорошо. Im resciving сообщение как SOAP к моему устройству android и заполняя spinner с деталями spittet «,». Внезапный удар. сделал мой день! – user2053451

1

Вместо того, чтобы немедленно возвращался в для цикла либо использовать yield заявление (и изменить тип возвращаемого значения IEnumerable<String> - который просто перемещает петлю for из функции и где-то еще) или использовать StringBuilder построить результирующую строку ,

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

Огромное вам спасибо, сейчас он отлично работает :) Удерживайте это на некоторое время! – user2053451

0

Попробуйте

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

 Смежные вопросы

  • Нет связанных вопросов^_^