SELECTsql语句的ExecuteNonQuery不返回任何行如何查看ExecuteNonQueryforSELECTsqlstatementreturnsnorowsandreturnsnorows?ExecuteNonQuery方法返回受INSERT、UPDATE或DELETE影响的行数。如前所述,该方法用于执行DML(数据操作语言)语句。ExecuteReader方法将返回SELECT的结果集。当您查询一堆结果时使用此方法,例如来自表、视图等的行。ExecuteScalar方法将在SELECT语句的第一行、第一列中返回单个值。当您希望在查询中只返回一个值时使用此方法。总之,在使用ExecuteNonQuery方法时,SELECT语句没有结果是很正常的。请改用ExecuteReader。使用ExecuteReader方法,您将知道返回的SqlDataReader对象实例返回的行数。整数行=0;如果(reader.HasRows)而(reader.Read())行++;返回行;//返回从阅读器读取的行数。我认为没有办法做到这一点。将ExecuteScalar与selectcount(*)where...结合使用来计算与原始SELECT查询的条件匹配的行数。下面的示例,从这里解释:;如果您也需要这些行,我认为您已经在使用ExecuteReader。请改用ExecuteReader方法。这将返回一个具有HasRows属性的SqlDataReader。ExecuteNonQuery不应用于SELECT语句。这已经很晚了,但我最近遇到了这个问题,并认为这对寻求相同问题帮助的其他人(比如我)会有帮助。无论如何,我相信您实际上可以按照自己的方式使用ExecuteNonQuery。但是......您必须将底层SELECT查询调整为存储过程,而不是将SELECT查询和输出参数设置为等于行数。如MSDN文档中所述:虽然ExecuteNonQuery不返回任何行,但任何输出参数或映射到参数的返回值都填充有数据。鉴于此,这就是我所做的。顺便说一句,如果有任何错误,我会很感激那里的专家反馈,但它似乎对我有用。首先,您的存储过程应该有两个SELECT语句:一个返回数据集,另一个绑定到输出参数以返回记录计数:CREATEPROCEDUREspMyStoredProcedure(@TotalRowsintoutput)ASBEGINSELECT*FROMMyTable;//请参阅下面有关此行的额外说明。从MyTable中选择@TotalRowsCOUNT(*);END其次,添加此代码(在vb.net中,使用SqlCommand等...)。DimcnAsSqlConnection,cmAsSqlCommand,drAsSqlDataReaderDimmyCountAsInt32cn=NewSqlConnection("MyConnectionString")cn.Open()//我事先打开我的连接,但很多人在执行查询之前打开它.不确定这是否重要。cm=NewSqlCommand("spMyStoredProcedure",cn)cm.CommandType=CommandType.StoredProcedurecm.Parameters.Add("@TotalRows",SqlDbType.Int).Direction=ParameterDirection.Outputcm.ExecuteNonQuery()myCount=CType(cm.Parameters("@TotalRows").Value,Integer)IfmyCount>0Then//Dosomething.EndIfdr=cm.ExecuteReader()Ifdr.HasRowsThen//使用存储过程的第一条SELECT语句返回实际查询结果EndIfdr.Close()cn.Close()dr=Nothingcm=Nothingcn=NothingThat's全部。附加说明。我假设您可能想要获取“MyCount”数量,而不是确定是否继续返回您的查询。原因是因为使用这种方法,您实际上并不需要这样做。由于我在获取计数后使用“ExecuteReader”方法,因此我可以使用数据读取器的“HasRows”属性来确定是否继续返回预期的数据集。但是,要返回数据集需要一个返回数据集的SELECT语句,因此我的存储过程中使用第一个SELECT语句的原因。顺便说一句,这种使用“ExecuteNonQuery”方法的方法很酷的一点是,您可以在关闭DataReader之前使用它来获取总行数(在DataReader关闭之前,您无法读取输出参数,这是我想做什么,这个方法绕过了那个)。我不确定这样做是否会导致性能损失或陷阱来解决问题,但就像我说的那样......它对我有用。=d以上为C#学习教程:SELECTsql语句的ExecuteNonQuery不返回任何行。分享的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收集,不代表侵权,请点击右边联系管理员删除。如需转载请注明出处:
