我正在运行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'
答案 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;