2012-03-26 2 views
1

プロパティであるforeachループで呼び出したいデータセットがあります。私は、あなたが代わりにDataTableを使用する必要がありますforeachループのデータセットプロパティを呼び出します。

public DataSet run(string query) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter(); 
    adapter.SelectCommand = new SqlCommand(query, conn); 
    adapter.Fill(dataset); 
    return dataset; 
} 

string query = "select * from table"; 
foreach (DataRow row in run(query)) 
{ 
// 
} 
+1

DataTableのみを使用する場合は、なぜデータセットを埋めますか? DataTableのオーバーロードがあります。http://msdn.microsoft.com/en-us/library/905keexk.aspx –

+0

DataSetには行がありません。これらのテーブルにはテーブルがあります。だから、最初にテーブルを反復処理する必要があります。また、DataSetを宣言する必要があります:-) –

答えて

2

DataSetにはDataRowオブジェクトを返すメソッドがありません。あなたが指定することができない場合

は、テーブル名は、あなたがこのような数値インデックスを使用することができます返さ:

foreach (DataRow row in run(query).Tables[0].Rows) 
{ 
// 
} 

をする場合、あなたがしなければならない複数の行を返すことがあります、クエリそうのようなすべてのテーブルスルーループ:

foreach(DataTable table in run(query).Tables) 
{ 
    foreach(DataRow row in table.Rows) 
    { 
     foreach (DataColumn column in table.Columns) 
     { 
      // 
     } 
    } 
} 
2

.table [ "XXX"]を使用する必要はありません。

2

正確にはあなたが避けたいものがあります。これは少なくとも数値インデックスです。しかし、それは私の元のデータセットが宣言されているのか疑問に思う。

foreach (DataRow row in run(query).Tables[0].Rows) 
{ 
    // 
} 

警告:あなたのrun()メソッドは反パターンです。私は多くの人が文字列を受け入れる単純なメソッドにデータベース呼び出しを抽象化したいと思っています。その結果、文字列連結を使用して安全でない方法でSQLを構築する、プロジェクト全体にコードが散在しています。

関連する問題