为什么我的System.Data.DataSet在ForEach中不起作用? (没有GetEnumerator)

时间:2016-03-22 17:06:45

标签: c# asp.net-mvc asp.net-web-api foreach

我有一个令人费解的错误:我使用DataSet从存储过程返回结果,但是我无法使用ForEach循环数据...因为显然DataSet没有枚举

  

错误111 foreach语句无法对类型为' System.Data.DataSet'的变量进行操作。因为' System.Data.DataSet'不包含' GetEnumerator'

的公开定义

据我所知,每个DataSet都有一个可公开访问的枚举器,实际上在互联网上有多个以这种方式使用的DataSet示例!所以我有点困惑......我有配置问题吗?我错过了一些明显的东西吗?

我在.NET 4.6中使用WebApi

代码(通用化)如下

        DataSet ds = new DataSet("DataSet");
        string connectionString = ConfigurationManager.ConnectionStrings["SQLConnection"].ConnectionString;
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            SqlCommand sqlComm = new SqlCommand("StoredProcedure", conn);
            sqlComm.Parameters.AddWithValue("@Param1", 0);
            sqlComm.Parameters.AddWithValue("@Param2", 1);                

            sqlComm.CommandType = CommandType.StoredProcedure;

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = sqlComm;

            da.Fill(ds);
        }

        foreach (DataRow d in ds)
        {
            // Do things
        }

2 个答案:

答案 0 :(得分:2)

像这样使用

foreach(DataRow dr in ds.Tables[0].Rows)
{
  // do your work here
}

答案 1 :(得分:0)

数据集不会从System.Collections继承而且不可枚举。

https://msdn.microsoft.com/en-us/library/system.data.dataset(v=vs.110).aspx

但是,如果你调用AsEnumerable(),Datatable会这样做。

https://msdn.microsoft.com/en-us/library/system.data.datatable(v=vs.110).aspx