比如:
存储过程端                               在网页中调用存储过程如下:
……                                       cm=new SqlCommand("storedprocname",conn);
begin                                       …………………………
select count(*) as count1 from a           dr=cm.ExecuteReader();
select count(*) as count2 from b            接下来我想在网页端获得count1,count2的值,
end                                         请问应该怎么样写呢?
go

解决方案 »

  1.   

    用变量输出就可以了 假如count1 count2 是存储过程的用于输出的变量select @count1=count(*) from a select @count2=count(*) from b 
      

  2.   

    把@count1和@count2定义为output就行了。
    @count1 int output,@count2 int output
      

  3.   

    如果存储过程端是
    @count1 int output,@count2 int output
    select @count1=count(*) from a 
    select @count2=count(*) from b 
    这样,那么在网页中应该如何调用呢
      

  4.   

    楼主最开始的是可以取得结果的
    dr=cm.ExecuteReader();
    while (dr.Read())
    {
      int count1 = dr.GetInt32(0);
    }
    dr.NextResult();
    while (dr.Read())
    {
      int count2 = dr.GetInt32(0);
    }改用output型参数也是可以的
    SqlCommand com = new SqlCommand();
    然后设置com的连接等(省略)
    然后添加参数,并设置为输出参数。
    com.Paraments.Add("@count1",SqlDbType.Int,4);
    com.Parameters["@count1"].Direction = System.Data.ParameterDirection.Output;
    然后com.ExecuteNonQuery();
    这个时候用int.Parse(com.Parameters["@count1"].Value.ToString());可以取得count1
    同理取得count2
      

  5.   

    谢谢 jkflyfox(飞狐) 我现在就调试看看
      

  6.   

    不行耶,我用
    dr=cm.ExecuteReader();
    while (dr.Read())
    {
      int count1 = dr.GetInt32(0);
    }
    dr.NextResult();
    while (dr.Read())
    {
      int count2 = dr.GetInt32(0);
    }
    明明有记录的,可是读出来的全是0
    也就是说count1为0,count2也为0,我不知道是什么原因
      

  7.   

    你可以这样写
    你是想要输出所有记录的个数吧
    SQl语句这样写:
    select * from a
    后台这样写代码:
    int i=0;
    while(dr.Read())
    {
       i+=1;
    }
    Response.Write(i);
      

  8.   

    回 rije_077(Rije) 
    是的,我是想要输出所有记录的个数,但是在存储过程中我要用到两个SQL语句,因为涉及到多个表
    那么在网页中我就不知道怎么样写代码:
    我在网页中是这样写的                             在存储过程中是这样写的
    dr=cm.ExecuteReader();                            select count(*) as count1 from a
    while (dr.Read())                                  select count(*) as count2 from b
    {                                                        
      int count1 = dr.GetInt32(0);                             
    }                                                    
    dr.NextResult();                                       
    while (dr.Read())
    {
      int count2 = dr.GetInt32(0);
    }
    明明有记录的,可是读出来的全是0
    也就是说count1为0,count2也为0,我不知道是什么原因,可以帮帮我吗
      

  9.   

    可是为什么我这边会不行呢?对了,我这里用到的是调用函数的,其实是这样的
    public SqlDataReader aa()
    {
      try
    {
    conn.Open
    cm=new SqlCommand("storedprocname",conn);
    dr=cm.ExecuteReader();
    return dr;
    }
    catch(Exception e)
    {
    conn.Close()
    return null;
    }
    }
    dr=aa();
    if(dr!=null && dr.HasRows)
    {
    while (dr.Read())                                  {                                                        
      int count1 = dr.GetInt32(0);                             
    }                                                    
    dr.NextResult();                                       
    while (dr.Read())
    {
      int count2 = dr.GetInt32(0);
    }
    }
    else
    {
    Response.Write("全部记录为空");
    }
    明明有记录的,可是读出来的全是0
    也就是说count1为0,count2也为0,我不知道是什么原因,
      

  10.   

    .....
     SqlParameter parametercount = new SqlParameter("@count1", SqlDbType.Int);
       
       parametercount.Direction = ParameterDirection.Output;
    myCommand.Parameters.Add(parametercount); myConnection.Open();
    myCommand.ExecuteNonQuery();
    myConnection.Close(); 执行存储过程后可以取出来啊,这样就可以了,如下string count1 = parametercount.Value.ToString()
      

  11.   

    可是为什么我这边会不行呢?对了,我这里用到的是调用函数的,其实是这样的
    public SqlDataReader aa()
    {
      try
    {
    conn.Open
    cm=new SqlCommand("storedprocname",conn);
    dr=cm.ExecuteReader();
    return dr;
    }
    catch(Exception e)
    {
    conn.Close()
    return null;
    }
    }
    dr=aa();
    if(dr!=null && dr.HasRows)
    {
    while (dr.Read())                                  {                                                        
      int count1 = dr.GetInt32(0);                             
    }                                                    
    dr.NextResult();                                       
    while (dr.Read())
    {
      int count2 = dr.GetInt32(0);
    }
    }
    else
    {
    Response.Write("全部记录为空");
    }
    明明有记录的,可是读出来的全是0
    也就是说count1为0,count2也为0,我不知道是什么原因,我就想用这样的方法去实现(不想用输出参数),不知道怎么样才能成功,快点来帮帮我吧
    急急急呀