存储多行存储过程数据以稍后在 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();
我有一个存储过程可以 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();