我试图列出表中的所有数据,但它只返回第一行,它不循环整个表。 我需要将数据作为字符串返回,因为我将在ASMX Web服务中使用它。
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 :(得分:3)
foreach (DataRow row in table.Rows)
{
return row["Name"].ToString();
}
你是从第一次迭代回来的。
答案 1 :(得分:1)
不是在for循环中立即返回,而是使用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();
答案 2 :(得分:0)
试试这个
var temp= "<String>" +
string.Join("</String>\n<String>", dt.Rows.Cast<DataRow>().Select(x => x["Name"].ToString())) +
"</String>";