0

テーブル内のすべてのデータを一覧表示しようとしていますが、最初の行のみが返され、テーブル全体がループされません。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;
}

誰かが私を正しい方向に向けたり、例を挙げたりできますか?

4

3 に答える 3

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

最初の反復自体から戻っています。

于 2013-03-13T11:14:33.050 に答える
1

forループですぐに戻る代わりに、yieldステートメントを使用するか(戻り値の型をIEnumerable<String>-に変更します。これにより、forループが関数の外に移動し、別の場所に移動します)、aを使用し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();
于 2013-03-13T11:19:04.913 に答える
0

これを試して

    var temp=  "<String>" +
            string.Join("</String>\n<String>", dt.Rows.Cast<DataRow>().Select(x => x["Name"].ToString())) +
            "</String>";
于 2013-03-13T11:38:47.203 に答える