从方法循环结果

时间:2012-01-18 19:30:24

标签: c#

我有一个调用Proc广告的方法返回数据。但我想调用该方法并遍历所有结果并使用结果插入Excel文档。我似乎无法弄清楚如何循环来自方法调用的结果。这是我的方法:

    public DataView GetCoupons()
    {
        string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("CPC_GetAllCoupons", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        //make the dap & ds
        SqlDataAdapter dap = new System.Data.SqlClient.SqlDataAdapter(cmd);
        DataSet ds = new DataSet();

        //open con
        if (conn.State == ConnectionState.Closed)
            conn.Open();

        //get the data
        dap.Fill(ds);

        //close the conn and return
        if (conn.State == ConnectionState.Open)
            conn.Close();

        return ds.Tables[0].DefaultView;
   }

所以我想调用该方法并获取所有结果并循环结果。我该怎么做呢?

谢谢!

5 个答案:

答案 0 :(得分:4)

当您填写DataSet时,您将获得从过程调用返回的所有结果集的表示。要访问单个结果集,您只需枚举Tables集合,就像您正在执行的操作:

 foreach(DataTable table in ds.Tables)

然后,您可以枚举每个数据集中的所有记录,如下所示:

 foreach(DataRow row in table.Rows)

然后从每条记录中获取数据:

 object something = row["SomeColumnName"];

答案 1 :(得分:2)

DataView coupons = GetCoupons();
foreach (var row in coupons) {
   // do something here
}

答案 2 :(得分:1)

像这样,应该足够

foreach (DataRowView rowView in dv) //where dv is your DataView
{
    DataRow row = rowView.Row;

    // Do your stuff here
}

希望这有帮助。

答案 3 :(得分:1)

我建议将数据访问封装在存储库中,该存储库返回您需要的类型的对象。例如。

public class Coupon
{
    public int Foo { get; set; }
    public int Bar { get; set; }
}

public class CouponRepository
{
    private readonly string connectionString;

    public CouponRepository(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public IEnumerable<Coupon> GetCoupons()
    {        
        using(var conn = new SqlConnection(this.connectionString))
        using(var cmd = new SqlCommand("CPC_GetAllCoupons", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();

            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    yield return new Coupon
                    {
                        Foo = (int)reader["Foo"],
                        Bar = (int)reader["Bar"],
                    };
                }
            }
        }
    }
}

用法: -

var connectionString = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
var repo = new CouponRepository(connectionString);
foreach (var coupon in repo.GetCoupons())
{
    // do something
}

答案 4 :(得分:0)

您可以使用:

Dataview dv = GetCoupons();
foreach(Item item in dv.Table.Rows)
{
    //...
}

但是有很多方法可以做到这一点。