C# 调用SELECT COUNT(*)查询后从数据集返回数字
我有一个疑问:C# 调用SELECT COUNT(*)查询后从数据集返回数字,c#,asp.net,sql,C#,Asp.net,Sql,我有一个疑问: SELECT COUNT(*) From Employees 我执行查询,并得到以下结果: public static int GetNumJobs() { clsJobPosting JobPosting = new clsJobPosting(); DataSet dsJobs = JobPosting.GetNumRows(); DataTable dtJobs = dsJobs.Tables[0]; return Convert.
SELECT COUNT(*) From Employees
我执行查询,并得到以下结果:
public static int GetNumJobs()
{
clsJobPosting JobPosting = new clsJobPosting();
DataSet dsJobs = JobPosting.GetNumRows();
DataTable dtJobs = dsJobs.Tables[0];
return Convert.ToInt32(dtJobs.Rows[0]);
}
GetNumRows返回数据集,我想返回此查询中的行数,如何才能完成此操作?尝试更改此设置
return Convert.ToInt32(dtJobs.Rows[0]);
对此
return Convert.ToInt32(dtJobs.Rows[0][0]);
另外,为什么要从JobPosting.GetNumRows返回数据集?您应该在那里返回一个int,这样就不必在代码中重复相同的逻辑;其中columnName是从存储过程返回的列的名称
还有一些代码建议:
该方法名为GetNumRows,但返回的是数据集,这也有点误导。也许通过说GetJobs或类似的话来让它更具可读性
您不需要在类名前面加cls。VSIDE将以多种方式为您提供所有必要的信息
您需要为存储过程中的列指定名称:
SELECT COUNT(*) ItemCount FROM Employees
另一方面,你真的不应该使用COUNT*。只需使用主键列,如下所示:
SELECT COUNT(ItemID) ItemCount FROM Employees
您应该使用标量执行,而不是将其填充到数据集中并获取行。对于单值返回,填充一个数据集会有很大的开销
在您的代码中:
return dtJobs.Rows[0].Field<int>("ItemCount");
他正在返回一个int。不过,这应该是从他的数据库返回的标量,因为数据集对于他尝试执行的操作来说有太多的开销。这就是我的建议,我知道当前方法正在返回一个int,我对DAO方法很好奇。