存储多行存储过程数据以稍后在 c# 中循环遍历行

storing multi row stored procedure data to loop through rows later in c#

我有一个存储过程可以 return 多行数据。在我的示例中,我们使用了执行以下操作的 SqlDataReader:

            SqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {

                conf.T_id = dr["t_id"].ToString();
                conf.Cm_firstname = dr["cm_firstname"].ToString();
                conf.Cm_lastname = dr["cm_lastname"].ToString();
                conf.Cm_userid = Convert.ToInt32(dr["cm_userid"]);
                conf.AgeOfNotification = dr["AGEOFNOTIFICATION"].ToString();
                conf.DelegateSystem = dr["DELEGATESYSTEM"].ToString();
                conf.P_Id = Convert.ToInt32(dr["P_id"]);
            }
            dr.Close();

但是,在我的例子中,我需要存储 returned 信息并稍后循环遍历每一行以使用每一行的数据调用另一个 class。我如何存储此信息并稍后循环?

我是这样尝试的,但我正在谷歌搜索,但看起来不可能这样。

在我的sql实用工具class中:

            DataSet spDataSet = new DataSet();
            ...
            sqlDataAdapter.Fill(spDataSet);
            connection.Close();
            connection.Dispose();
            returnVal.SpDataSet = spDataSet;

然后在我的 class 中,我想遍历每一行和每一行,分配给变量并用它调用 class:

            DataSet tmpUMData = conf.SpDataSet;
            //then I want to convert the DataSet to a SqlDataReader so I can loop through the rows:
            ??convert
            //apparently can't convert like this and do like before
            SqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
                    T_id = dr["t_id"].ToString();
                    Cm_firstname = dr["cm_firstname"].ToString();
                    Cm_lastname = dr["cm_lastname"].ToString();
                    Cm_userid = Convert.ToInt32(dr["cm_userid"]);
                    AgeOfNotification = dr["AGEOFNOTIFICATION"].ToString();
                    DelegateSystem = dr["DELEGATESYSTEM"].ToString();
                    P_Id = Convert.ToInt32(dr["P_id"]);
                    addTask(T_id,Cm_firstname,...);
            }
            dr.Close();

我不知道如何从 DataSet 转换为 SqlDataReader。看起来我需要 loop through the datarows,但我无法访问行中的每个值。

        foreach (DataTable table in tmpUMData.Tables)
        {
            foreach (DataRow row in table.Rows)
            {
                foreach (object item in row.ItemArray)
                {
                    //I'm not sure how to get data like I do for dr.Read()
                    string t_id = item["t_id"].ToString(); //cs0021 cannot apply indexing with [] to an expression of type object
                    ... 
                    taskAdd(t_id, ...);
                }
            }
        }

我没有看到任何关于如何访问每个数据项的好例子。有任何想法吗?我从 sql query/sp 编辑的数据 return 如下所示:

t_id   cm_firstname   cm_lastname   cm_userid   ageOfNotification   DelegateSystem  P_ID
12345  Joe            Shmo          123         30                  One             7890
23456  Yoda           Creature      234         60                  Other           8901
...

假设您的 conf 是 Conf class 的一个实例,您只需创建一个 List 来存储数据:

public List<Conf> GetData()
{
.....your code

            var list = new List<Conf>();
            SqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
               var conf=new Conf();
                conf.T_id = dr["t_id"].ToString();
                conf.Cm_firstname = dr["cm_firstname"].ToString();
                conf.Cm_lastname = dr["cm_lastname"].ToString();
                conf.Cm_userid = Convert.ToInt32(dr["cm_userid"]);
                conf.AgeOfNotification = dr["AGEOFNOTIFICATION"].ToString();
                conf.DelegateSystem = dr["DELEGATESYSTEM"].ToString();
                conf.P_Id = Convert.ToInt32(dr["P_id"]);
               list.Add(conf);
            }
            dr.Close();
......
return list;  // for the future use
}

你可以这样使用它

var list=GetData();