C# 迭代多个数据表
我有一个运行两条select语句的C# 迭代多个数据表,c#,datatable,C#,Datatable,我有一个运行两条select语句的SQL Server存储过程。我可以很容易地返回一条select语句并将其存储在DataTable中,但如何使用这两条语句呢 如何将变量countfromfirstselectstatement设置为等于从第一个select语句返回的计数,以及如何将变量countfromsecondselectstatement设置为等于从第二个select语句返回的计数 private void ReturnTwoSelectStatements() { DataSet
SQL Server
存储过程。我可以很容易地返回一条select语句并将其存储在DataTable
中,但如何使用这两条语句呢
如何将变量countfromfirstselectstatement
设置为等于从第一个select语句返回的计数,以及如何将变量countfromsecondselectstatement
设置为等于从第二个select语句返回的计数
private void ReturnTwoSelectStatements()
{
DataSet dt112 = new DataSet();
using (var con = new SqlConnection(connectionString))
{
using (var cmd = new SqlCommand("Return2SelectStatements", con))
{
using (var da = new SqlDataAdapter(cmd))
{
cmd.CommandType = CommandType.StoredProcedure;
da.Fill(dt112);
}
}
}
DataTable table1 = dt112.Tables[0];
DataTable table2 = dt112.Tables[1];
string countfromFirstSelectStatement = table1.Rows.Count().ToString();
string countfromSecondSelectStatement = table2.Rows.Count().ToString();
//I only want to iterate the data from the 1st select statement
foreach (DataRow row in dt112.Rows)
{
}
}
您还可以直接使用
DbDataReader
(cmd.ExecuteReader()
),它将为您提供NextResult
以前进到下一个结果集DataTable.Load
允许您将行从数据读取器加载到表中
DbDataAdapter
仅仅将数据读入数据表就有点过头了。它的设计目的是允许从真实数据源中抽象出来的控件的整个CRUD操作范围,而实际情况并非如此
样本:
using (var reader = cmd.ExecuteReader())
{
dataTable1.Load(reader);
if (!reader.NextResult()) throw SomethingWhenTheresNoSecondResultSet();
dataTable2.Load(reader);
}
您还可以直接使用
DbDataReader
(cmd.ExecuteReader()
),它将为您提供NextResult
以前进到下一个结果集DataTable.Load
允许您将行从数据读取器加载到表中
DbDataAdapter
仅仅将数据读入数据表就有点过头了。它的设计目的是允许从真实数据源中抽象出来的控件的整个CRUD操作范围,而实际情况并非如此
样本:
using (var reader = cmd.ExecuteReader())
{
dataTable1.Load(reader);
if (!reader.NextResult()) throw SomethingWhenTheresNoSecondResultSet();
dataTable2.Load(reader);
}
用select语句填充数据集并访问它:
....
DataSet dataSet = new DataSet();
da.Fill(dataSet);
....
DataTable table1 = dataSet.Tables[0];
DataTable table2 = dataSet.Tables[1];
string countfromFirstSelectStatement = table1.Rows.Count.ToString();
string countfromSecondSelectStatement = table2.Rows.Count.ToString();
用select语句填充数据集并访问它:
....
DataSet dataSet = new DataSet();
da.Fill(dataSet);
....
DataTable table1 = dataSet.Tables[0];
DataTable table2 = dataSet.Tables[1];
string countfromFirstSelectStatement = table1.Rows.Count.ToString();
string countfromSecondSelectStatement = table2.Rows.Count.ToString();
您是否尝试填充数据集?一个数据集有一个表集合。@Steve-那么,不是填充一个数据表,而是填充一个数据集并迭代这些表?是的,或者作为Luaan的回答。您是否尝试填充一个数据集?一个数据集有一个表集合。@Steve-所以不是填充一个数据表,而是填充一个数据集并迭代这些表?是的,或者作为Luaan的回答。很抱歉。忘记添加
DataSet.Tables
属性。感谢@SteveUsing this抛出我的迭代语法-我需要如何将其更改为foreach(dt112.Rows中的DataRow行)“System.Data.DataSet”不包含“Rows”的定义,并且找不到接受“System.Data.DataSet”类型的第一个参数的扩展方法“Rows”-我只想迭代从我的第一个Select语句或table1(在上面的语法中)返回的行。您的代码是否类似于foreach(table1.Rows中的DataRow行)
?或者在您的示例中:DataTable dt112=dataSet.Tables[0];foreach(dt112.Rows中的DataRow行)
?让我们来看看。很抱歉。忘记添加DataSet.Tables
属性。感谢@SteveUsing this抛出我的迭代语法-我需要如何将其更改为foreach(dt112.Rows中的DataRow行)“System.Data.DataSet”不包含“Rows”的定义,并且找不到接受“System.Data.DataSet”类型的第一个参数的扩展方法“Rows”-我只想迭代从我的第一个Select语句或table1(在上面的语法中)返回的行。您的代码是否类似于foreach(table1.Rows中的DataRow行)
?或者在您的示例中:DataTable dt112=dataSet.Tables[0];foreach(dt112.Rows中的DataRow行)
?让我们来看看。