逐行列出sql表中的所有数据

时间:2013-03-13 11:10:58

标签: c# sql sql-server sqlcommand

我试图列出表中的所有数据,但它只返回第一行,它不循环整个表。 我需要将数据作为字符串返回,因为我将在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;
}

有人能指出我正确的方向还是给我一个例子?

3 个答案:

答案 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>";