C# 怎么执行一个存储过程后获取返回值“Return Value”和查询结果?存储过程类似:DECLARE @ret int
select @ret = count(id) FROM UserInfo
SELECT TOP (@PageSize) * FROM UserInfo WHERE UserName not in (SELECT ((@Page-1)*@PageSize) UserName FROM UserInfo)
return @ret获取总数量和经过分页的查询结果我要执行的是另外一个存储过程:aspnet_Membership_GetAllUsers,差不多

解决方案 »

  1.   

    public static int User_Add(User us)
         {
             int iRet;
             SqlConnection conn = new SqlConnection(Conn_Str);
             SqlCommand cmd = new SqlCommand("User_Add", conn);
             cmd.CommandType = CommandType.StoredProcedure;
             cmd.Parameters.AddWithValue("@UName", us.UName);
             cmd.Parameters.AddWithValue("@UPass", us.UPass);
             cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);
             cmd.Parameters.AddWithValue("@PassKey", us.PassKey);
             cmd.Parameters.AddWithValue("@Email", us.Email);
             cmd.Parameters.AddWithValue("@RName", us.RName);
             cmd.Parameters.AddWithValue("@Area", us.Area);
             cmd.Parameters.AddWithValue("@Address", us.Address);
             cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);
             cmd.Parameters.AddWithValue("@Phone", us.Phone);
             cmd.Parameters.AddWithValue("@QQ", us.QQ);
             cmd.Parameters.Add("@RETURN_VALUE", "").Direction=ParameterDirection.ReturnValue;       
             try
             {
                 conn.Open();
                 cmd.ExecuteNonQuery();
                 iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;
             }
             catch (SqlException ex)
             {
                 throw ex;
             }
             finally
             {
                 conn.Close();
             }
             return iRet;
         }
      

  2.   

    支持3楼 …只是代码有点长了 
    cmd.Parameters.Add("@RETURN_VALUE", "").Direction=ParameterDirection.ReturnValue;   //添加获得返回值的参数       
             try
             {
                 conn.Open();
                 cmd.ExecuteNonQuery();
                 iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;  //获得返回值的地方
             }
      

  3.   

    问题是里面还有一条查询语句呢。SqlConnection conn = new SqlConnection(SqlHelper.SqlConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "aspnet_Membership_GetAllUsers";
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@ApplicationName", "CFPhoto");
    cmd.Parameters.AddWithValue("@PageIndex", ThisPage);
    cmd.Parameters.AddWithValue("@PageSize", PageSize);
    cmd.Parameters.Add("@RETURN_VALUE","").Direction = ParameterDirection.ReturnValue;
    conn.Open();
    SqlDataReader dr = cmd.ExecuteReader();//获取查询语句结果
    Label1.Text = cmd.Parameters["@RETURN_VALUE"].Value.ToString();
    GridView1.DataSource = dr;
    GridView1.DataBind();
    dr.Close();
    难道要这样?SqlConnection conn = new SqlConnection(SqlHelper.SqlConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "aspnet_Membership_GetAllUsers";
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@ApplicationName", "CFPhoto");
    cmd.Parameters.AddWithValue("@PageIndex", ThisPage);
    cmd.Parameters.AddWithValue("@PageSize", PageSize);
    cmd.Parameters.Add("@RETURN_VALUE","").Direction = ParameterDirection.ReturnValue;
    conn.Open();
    cmd.ExecuteNonQuery();//先执行一遍
    SqlDataReader dr = cmd.ExecuteReader();//再执行一遍
    Label1.Text = cmd.Parameters["@RETURN_VALUE"].Value.ToString();
    GridView1.DataSource = dr;
    GridView1.DataBind();
    dr.Close();看着很不爽。
      

  4.   

    SqlConnection conn = new SqlConnection(SqlHelper.SqlConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "aspnet_Membership_GetAllUsers";
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@ApplicationName", "CFPhoto");
    cmd.Parameters.AddWithValue("@PageIndex", ThisPage);
    cmd.Parameters.AddWithValue("@PageSize", PageSize);
    cmd.Parameters.Add("@RETURN_VALUE","").Direction = ParameterDirection.ReturnValue;
    conn.Open();
    cmd.ExecuteNonQuery();//先执行一遍
    SqlDataReader dr = cmd.ExecuteReader();//再执行一遍
    Label1.Text = cmd.Parameters["@RETURN_VALUE"].Value.ToString();
    GridView1.DataSource = dr;
    GridView1.DataBind();
    dr.Close();cmd.CommandText = "aspnet_Membership_GetAllUsers";
    是写的你的存储过程的名称就行了,
    cmd.CommandType = CommandType.StoredProcedure;这个就代表执行的是存储过程
    而如果是cmd.CommandType = CommandType.Text;这也是默认的,这样就是执行的SQl语句
    所以这样是可以的ParameterDirection.ReturnValue这个就是取返回结果的Label1.Text 值就是返回值
      

  5.   

    SqlConnection conn = new SqlConnection(SqlHelper.SqlConnectionString);
    SqlCommand cmd = new SqlCommand();
    cmd.CommandText = "aspnet_Membership_GetAllUsers";
    cmd.Connection = conn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@ApplicationName", "CFPhoto");
    cmd.Parameters.AddWithValue("@PageIndex", ThisPage);
    cmd.Parameters.AddWithValue("@PageSize", PageSize);
    cmd.Parameters.Add("@RETURN_VALUE","").Direction = ParameterDirection.Output;
    conn.Open();
    //cmd.ExecuteNonQuery();//先执行一遍
    SqlDataReader dr = cmd.ExecuteReader();//再执行一遍
    Label1.Text = cmd.Parameters["@RETURN_VALUE"].Value.ToString();
    GridView1.DataSource = dr;
    GridView1.DataBind();
    dr.Close();