我有一个调用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;
}
所以我想调用该方法并获取所有结果并循环结果。我该怎么做呢?
谢谢!
答案 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)
{
//...
}
但是有很多方法可以做到这一点。