有如下两个方法:RunExecute和 RunExecuteScalar如下
   public static int RunExecute(string procName, SqlParameter[] prams)
    {
        SqlConnection Conn = ReturnConn();
     
        SqlCommand Cmd = CreateCommand(procName, prams, Conn);
        int intResult = Cmd.ExecuteNonQuery();
        Conn.Close();
        return intResult;
    }
   
    public static int RunExecuteScalar(string procName)
    {
        SqlConnection Conn = ReturnConn();
        SqlCommand Cmd = DataBase.CreateCommand(procName, Conn);
        int intResult = Convert.ToInt32(Cmd.ExecuteScalar());
        Conn.Close();
        return intResult;
    }
这是要执行的存储过程procName
ALTER PROCEDURE dbo.ValidateUser (
@UserName varchar(50),
@UserPwd varchar(100)
)

AS
select count(*) from Users where UserName=@UserName and UserPwd=@UserPwd
RETURN当我执行上面的存储过程时,第一个返回的intResult为-1,第二个返回的是1,即查询的结果正确的,请大侠指点一下,以上两个方法ExecuteNonQuery()和ExecuteScalar()的区别是什么,

解决方案 »

  1.   

    msdn 上说的很清楚
    一个返回执行影响的行数一个返回第一行第一列的数据http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executenonquery(VS.80).aspx
    http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executescalar.aspx
      

  2.   

    ExecuteNonQuery返回的是受影响的行数
    ExecuteScalar返回的是第一行第一列的值
      

  3.   

    ExecuteScalar :返回第一列,第一行的数据。  
    第一列第一行不为空,那么ExecuteScalar就直接对应的值。  
    有第一行,但是第一列为空,那么返回的是 DBNull 。
    一行都没有,那么ExecuteScalar就返回null 
    ExecuteNonQuery():执行SQL,返回一个整型变量,如果SQL是对数据库的记录进行操作,那么返回操作影响的记录条数
      

  4.   

    ExecuteNonQuery返回的是受影响的行数
    ExecuteScalar返回的是第一行第一列的值
      

  5.   


    我还是一点困惑:
    如果ExecuteNonQuery()执行的一条SQL语句为select count(*) from students,(假设students有两条记录)那么它返回的是什么?
      

  6.   

    如果ExecuteNonQuery()执行的一条SQL语句为select count(*) from students,(假设students有两条记录)那么它返回的是什么?返回的是1 表示执行成功
      

  7.   

    ExecuteNonQuery返回的是受影响的行数
    用于select 的时候 好像返回值是-1.
      

  8.   

    ExecuteNonQuery 返回受影响的行数ExecuteScalar 返回第一行第一列的值,即查询到的第一条符合条件的数据记录
      

  9.   


     错了吧,应该是返回-1 ,根本就没有影响任何行,只有执行了 Add ,Update ,Delete ,数据库里的数据才会发生变化才,会返回 大于0的数,Select 不影响任何行
      

  10.   

    msdn 上说的很清楚
    一个返回执行影响的行数一个返回第一行第一列的数据http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executenonquery(VS.80).aspx
    http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executescalar.aspx
      

  11.   


    看了一下msdn上面的解说,它没有明确的说明不可以是select语句,现在我应该明白了,这个方法应该只适合add,update,delete语句
      

  12.   

    ExecuteNonQuery 第一个返回受影响的行数
    ExecuteScalar 返回第一列的值
      

  13.   

    ExecuteNonQuery 第一个返回受影响的行数,比如添加,删除,修改操作
    ExecuteScalar 返回第一列的值  ,比如查询操作
     
      

  14.   

    第一时间,应该想到的是查询MSDN帮助文档!
      

  15.   

    ExecuteNonQuery返回的是受影响的行数
    ExecuteScalar返回的是单行单列的值,只能返回单行单列