从DataTable中检索数据

时间:2016-04-01 17:17:41

标签: c# datatable

我正在运行SQL查询,它将返回查询

的计数
Select Count(numstudents) from classA

我正在使用C#连接到SQL Server并执行此查询,但我的问题是,如何获取返回的实际数字?我当前的方法返回DataTable中的行数,默认情况下总是为1.我需要返回Count()

以下是完整的C#语法:

private void GetData()
{
  DataSet ds = new DataSet()
  using (var con = new SqlConnection(connectionString))
  {
    using (var cmd = new SqlCommand("RunAStoredProc", con))
    {
        using (var da = new SqlDataAdapter(cmd))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            da.Fill(ds);
        }
    }
  }
  DataTable table1 = new DataTable();
  table1 = ds.Tables[0];
  DataTable table2 = new DataTable();
  table2 = ds.Tables[1];

  string numberreturned = table1.Rows.Count.ToString();
  Console.WriteLine(numberreturned);
  Console.ReadKey();
}

存储过程如下:

Alter Procedure [dbo].[GetData]
As

Select Count(*) FROM classA

Select studentfirstname, studentlastname FROM classA  
Where enrolled = 'Yes'

1 个答案:

答案 0 :(得分:1)

如果您只有一个存储过程返回的值,则不需要SqlDataAdapter和所需的所有基础结构。只需使用ExecuteScalar

int count = 0;
using (var con = new SqlConnection(connectionString))
using (var cmd = new SqlCommand("RunAStoredProc", con))
{
   cmd.CommandType = CommandType.StoredProcedure;
   count = (int)cmd.ExecuteScalar();
}
Console.WriteLine(count);
Console.ReadKey();

但是,如果您真的想要使用适配器和数据集,那么您可以找到查询结果,从返回表中的第一行和第一列读取值

int count = Convert.ToInt32(table1.Rows[0][0]);

或甚至(不声明table1变量)

int count = Convert.ToInt32(ds.Tables[0].Rows[0][0]);

要发现第一个select语句的结果与第二个select语句中返回的行数之间的差异,您可以编写

int allStudents = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
int enrolledStudents = ds.Tables[1].Rows.Count;

int notEnrolledStudents = allStudents - enrolledStudents;