2012-03-26 24 views
1

我有一個數據集,我想在屬性foreach循環中調用。我不想用。表[「XXX」]呼叫在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,爲什麼要填充DataSet? DataTable有一個重載:http://msdn.microsoft.com/en-us/library/905keexk.aspx – 2012-03-26 18:48:05

+0

DataSets沒有行,它們有表。所以你需要首先迭代表格。您還需要聲明DataSet :-) – 2012-03-26 19:50:24

回答

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

你應該使用DataTable代替。

2

這不是究竟是你想避免什麼:這至少是一個數字索引。但是這讓我想知道你的原始數據集是在哪裏申報的。

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

而只是爲了警告你:你的run()方法是一種反模式。我發現很多人想要將數據庫調用抽象爲接受字符串的簡單方法,而且他們幾乎總是忘記一件重要的事情:查詢參數。結果是整個項目中的代碼亂七八糟,它使用字符串連接來以不安全的方式構建sql。