2012-01-18 7 views
0

私は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; 
    } 

私はそのメソッドを呼び出し、すべての結果を取得し、結果をループしたいと思います。それをどうやってやりますか?

ありがとうございます!

答えて

1

このような何か、

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

    // Do your stuff here 
} 

・ホープ、このことができます十分なはずです。

4

DataSetを入力すると、プロシージャコールから返されたすべての結果セットが表示されます。

foreach(DataRow row in table.Rows) 

そして取得:

foreach(DataTable table in ds.Tables) 

を次に、あなたがそうのように各データセット内のすべてのレコードを列挙することができます:個々の結果セットにアクセスするには、単にあなたがやっているようTablesコレクションを列挙しますあなたが使用することができ

object something = row["SomeColumnName"]; 
+0

おかげで、私は、foreachの中ds.TablesをされたのDataTableを返すメソッドの呼び出しを置くでしょうか? –

+0

私はあなたのコードから変数名を引っ張っていました。 'return ds.Tables [0] .DefaultView'を実行していたところで、代わりに' ds; 'を返すだけで、あなたの呼び出しコードで列挙を行い、適切な処理をすることができます。 – Tejs

0

各レコードからのデータ

しかし、これを行う方法はたくさんあります。

2
DataView coupons = GetCoupons(); 
foreach (var row in coupons) { 
    // do something here 
} 
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 
}