2013-03-13 23 views
0

我想列出表中的所有数据,但它只返回第一行,它不会循环整个表。 我需要将数据作为字符串返回,因为我将在ASMX Web服务中使用它。在sql表中逐行列出所有数据

和XML架构只返回第一行

<String> data in row 1<String> 

我希望它这样的财产以后返回:

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

和行1到n行....

我已经测试了VS2012查询生成器中的sql语句,并且它工作正常。 所以我需要以某种方式列出所有数据。

这里是我的代码

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 2013-03-13 11:14:45

+0

你已经有了一个例子。你已经评论了。将每一行数据添加到列表中。然后在函数结尾处返回列表。降低过早的回报。 – musefan 2013-03-13 11:15:13

+0

您是否使用stringBuilder创建自己的xml?我希望不是,但是我问。 – granadaCoder 2013-03-13 13:28:12

回答

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

你从第一次迭代本身返回。

+0

我downvote ....我不是一个只是指出问题的答案。如果你想要我的一些观点,你应该举例说明如何解决这个问题 – musefan 2013-03-13 11:16:49

+3

@musefan:请你这样做。我不需要任何点朋友,它只是帮助我的同事。 – TalentTuner 2013-03-13 11:19:25

+0

现在,每一种想法都很好。 Im将消息作为SOAP重新分配给我的Android设备,并使用“,”将spittet中的项目填充到微调器中。很高兴。使我的一天! – user2053451 2013-03-13 11:41:33

1

而是在for循环或者使用一个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

非常感谢你,它现在正常工作:) 有一段时间徘徊! – user2053451 2013-03-13 11:28:08

0

试试这个

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