C# 计算sql行数

C# 计算sql行数,c#,sql,sql-server,C#,Sql,Sql Server,这是我的SQL查询,我正在使用SQLServerManagementStudio和C进行开发 代码工作得很好。但我只想计算受影响的行数 我试过数数等几个步骤,但都不起作用 SELECT LevelDetails.App_ID, LevelDetails.Intro_ID, LevelDetails.Side, LevelDetails.SLevel, Top_up_details.topupdate, Top_up_details.Recharge_epin,

这是我的SQL查询,我正在使用SQLServerManagementStudio和C进行开发

代码工作得很好。但我只想计算受影响的行数

我试过数数等几个步骤,但都不起作用

SELECT     
   LevelDetails.App_ID, LevelDetails.Intro_ID, LevelDetails.Side, 
   LevelDetails.SLevel, 
   Top_up_details.topupdate, Top_up_details.Recharge_epin, 
   Top_up_details.epin, Top_up_details.app_id AS Expr1
FROM
   LevelDetails 
INNER JOIN
   Top_up_details ON LevelDetails.App_ID = Top_up_details.app_id
WHERE     
   (LevelDetails.Intro_ID = '1001')
试试这个:

SELECT count(*)
FROM LevelDetails INNER JOIN Top_up_details 
                  ON LevelDetails.App_ID = Top_up_details.app_id
WHERE     (LevelDetails.Intro_ID = '1001')

你看起来像这样吗

您可以将COUNTLevelDetails.App_ID添加为rowcount,以及提供总行数的select部分

SELECT     
   LevelDetails.App_ID, LevelDetails.Intro_ID, LevelDetails.Side, 
   LevelDetails.SLevel, 
   Top_up_details.topupdate, Top_up_details.Recharge_epin, 
   Top_up_details.epin, Top_up_details.app_id AS Expr1,
   COUNT(LevelDetails.App_ID) OVER() As rowcount // gives you the total count also
FROM
   LevelDetails 
INNER JOIN
   Top_up_details ON LevelDetails.App_ID = Top_up_details.app_id
WHERE     
   (LevelDetails.Intro_ID = '1001') 

@OP这是您从注释中获取的代码

dtc = g1.return_dt("SELECT count(*) as app_c FROM LevelDetails 
                    INNER JOIN Top_up_details ON LevelDetails.App_ID = Top_up_details.app_id 
                    WHERE (LevelDetails.Intro_ID = '" + Session["appid"] + "')"); 

if (dtc.Rows.Count > 0) 
{ 
      Session["app_count"] = dt.Rows[0]["app_c"].ToString(); 
}
我认为在上面的代码中缺少Session[appid].ToString,但是在应用ToString之前检查null是很好的。下面是一个例子:

 if(Session["appid"] != null)
 {
      dtc = g1.return_dt("SELECT count(*) as app_c FROM LevelDetails 
                    INNER JOIN Top_up_details ON LevelDetails.App_ID = Top_up_details.app_id 
                    WHERE (LevelDetails.Intro_ID = '" + Session["appid"].ToString() + "')"); 

      if (dtc.Rows.Count > 0) 
      { 
               Session["app_count"] = dt.Rows[0]["app_c"].ToString(); 
      }
 }
另一个解决方案:

假设您使用上述查询获得的数据表是dtc,则只需检查表中返回的行数:

string sQuery = @" SELECT     
                       LevelDetails.App_ID, LevelDetails.Intro_ID, LevelDetails.Side, 
                       LevelDetails.SLevel, Top_up_details.topupdate, 
                       Top_up_details.Recharge_epin, Top_up_details.epin, 
                       Top_up_details.app_id AS Expr1
                   FROM
                       LevelDetails 
                   INNER JOIN
                       Top_up_details ON LevelDetails.App_ID = Top_up_details.app_id
                   WHERE     
                       (LevelDetails.Intro_ID = '1001')";

DataTable dtc = g1.return_dt(sQuery);
int iTotalRows = dtc.Rows.Count;

否则,要从数据库中获取计数,您可以使用sqlcommand.ExecuteScalar

您可以使用计数*并选择您提到的查询不会影响任何行,它将返回一个数据表。这里的“影响”是什么意思?通过“选择”,您选择的是记录,因此对数据没有影响。您可以通过select从数据库中获取计数,也可以计算返回的记录数。@user3133175如果您的问题中提到的查询为数据表提供了正确的结果,为什么不使用dt.Rows.count获取总计数?感谢sql management stdio中的代码。。但当我尝试在C中实现这是我的代码时,同样的错误也会出现:dtc=g1.return_dtSELECT count*as app_C FROM LevelDetails internal JOIN Top_up_details ON LevelDetails.app_ID=Top_up_details.app_ID WHERE LevelDetails.Intro_ID='+Session[appid]+';如果dtc.Rows.Count>0{Session[app_Count]=dt.Rows[0][app_c].ToString;}@user3133175:-您得到的错误是什么?@user3133175您的问题中提到的查询为数据表提供了正确的结果,为什么不使用dt.Rows.Count来获取总计数?