C# 迭代多个数据表

C# 迭代多个数据表,c#,datatable,C#,Datatable,我有一个运行两条select语句的SQL Server存储过程。我可以很容易地返回一条select语句并将其存储在DataTable中,但如何使用这两条语句呢 如何将变量countfromfirstselectstatement设置为等于从第一个select语句返回的计数,以及如何将变量countfromsecondselectstatement设置为等于从第二个select语句返回的计数 private void ReturnTwoSelectStatements() { DataSet

我有一个运行两条select语句的
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行)
?让我们来看看。