public DataTable getdatatable(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex, string strWhere, string ascColumn)
        {
            SqlCommand cmd = new SqlCommand("sp_PageView", conn);
            cmd.CommandType = CommandType.StoredProcedure;            SqlParameter para_tblName = new SqlParameter();
            para_tblName.ParameterName = "@tbname";
            para_tblName.SqlDbType = SqlDbType.VarChar;
            para_tblName.Direction = ParameterDirection.Input;
            para_tblName.Value = tblName;
            cmd.Parameters.Add(para_tblName);            SqlParameter para_strGetFields = new SqlParameter();
            para_strGetFields.ParameterName = "@FieldShow";
            para_strGetFields.SqlDbType = SqlDbType.VarChar;
            para_strGetFields.Direction = ParameterDirection.Input;
            para_strGetFields.Value = strGetFields;
            cmd.Parameters.Add(para_strGetFields);            SqlParameter para_fldName = new SqlParameter();
            para_fldName.ParameterName = "@Fieldkey";
            para_fldName.SqlDbType = SqlDbType.VarChar;
            para_fldName.Direction = ParameterDirection.Input;
            para_fldName.Value = fldName;
            cmd.Parameters.Add(para_fldName);            SqlParameter para_PageSize = new SqlParameter();
            para_PageSize.ParameterName = "@pageSize";
            para_PageSize.SqlDbType = SqlDbType.Int;
            para_PageSize.Direction = ParameterDirection.Input;
            para_PageSize.Value = PageSize;
            cmd.Parameters.Add(para_PageSize);            SqlParameter para_PageIndex = new SqlParameter();
            para_PageIndex.ParameterName = "@PageCurrent";
            para_PageIndex.SqlDbType = SqlDbType.Int;
            para_PageIndex.Direction = ParameterDirection.Input;
            para_PageIndex.Value = PageIndex;
            cmd.Parameters.Add(para_PageIndex);
            SqlParameter para_strWhere = new SqlParameter();
            para_strWhere.ParameterName = "@Where";
            para_strWhere.SqlDbType = SqlDbType.VarChar;
            para_strWhere.Direction = ParameterDirection.Input;
            para_strWhere.Value = strWhere;
            cmd.Parameters.Add(para_strWhere);
            SqlParameter para_ascColumn = new SqlParameter();
            para_ascColumn.ParameterName = "@fieldOrder";
            para_ascColumn.SqlDbType = SqlDbType.VarChar;
            para_ascColumn.Direction = ParameterDirection.Input;
            para_ascColumn.Value = ascColumn;
            cmd.Parameters.Add(para_ascColumn);            SqlParameter para_PageCount = new SqlParameter();
            para_PageCount.ParameterName = "@PageCount";
            para_PageCount.SqlDbType = SqlDbType.Int;
            para_PageCount.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(para_PageCount);
            try
            {
                SqlDataAdapter dpt = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                dpt.Fill(ds);
                return ds.Tables[0];
            }
            catch (SqlException e)
            {
                return null;
            }
        }上面的话,返回的是一个ds.Tables[0],但是还要返回一个(int)cmd.Parameters["@PageCount"].Value的输出参数,怎么办?

解决方案 »

  1.   

    ref int PageCount作为参数
      

  2.   

    ParameterDirection.Output
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServer"].ToString()); 
    conn.Open(); 
    SqlCommand MyCommand = new SqlCommand("MYSQL", conn); 
    MyCommand.CommandType = CommandType.StoredProcedure; 
    MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int)); 
    MyCommand.Parameters["@a"].Value = 20; 
    MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int)); 
    MyCommand.Parameters["@b"].Direction = ParameterDirection.Output; 
    MyCommand.ExecuteNonQuery(); 
    Response.Write(MyCommand.Parameters["@b"].Value.ToString()); 
    http://topic.csdn.net/u/20091013/13/1ba85d9b-ef2e-41d1-9fd5-11218015264c.html
      

  3.   

    给这个函数加一个参数 ref int PageCount 注意一定要在类型前加上ref,说明是引用参数,然后在返回table前给 PageCount赋值就行了使用的时候就是 先定义一个INT变量 调用函数时 在刚才的参数位置写“ref 提前定义的变量”!然后函数调用完毕后 你就可以直接使用刚才作为参数的变量了!这么说不知道明白了没!如果你不明白 去GOOGLE或者课本上找找关于ref或out关键字和相关概念
      

  4.   

    使用out关键字。代码如下:
    public DataTable getdatatable(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex, string strWhere, string ascColumn,out int retValue)
       SqlCommand cmd = new SqlCommand("sp_PageView", conn);
                cmd.CommandType = CommandType.StoredProcedure;            SqlParameter para_tblName = new SqlParameter();
                para_tblName.ParameterName = "@tbname";
                para_tblName.SqlDbType = SqlDbType.VarChar;
                para_tblName.Direction = ParameterDirection.Input;
                para_tblName.Value = tblName;
                cmd.Parameters.Add(para_tblName);            SqlParameter para_strGetFields = new SqlParameter();
                para_strGetFields.ParameterName = "@FieldShow";
                para_strGetFields.SqlDbType = SqlDbType.VarChar;
                para_strGetFields.Direction = ParameterDirection.Input;
                para_strGetFields.Value = strGetFields;
                cmd.Parameters.Add(para_strGetFields);            SqlParameter para_fldName = new SqlParameter();
                para_fldName.ParameterName = "@Fieldkey";
                para_fldName.SqlDbType = SqlDbType.VarChar;
                para_fldName.Direction = ParameterDirection.Input;
                para_fldName.Value = fldName;
                cmd.Parameters.Add(para_fldName);            SqlParameter para_PageSize = new SqlParameter();
                para_PageSize.ParameterName = "@pageSize";
                para_PageSize.SqlDbType = SqlDbType.Int;
                para_PageSize.Direction = ParameterDirection.Input;
                para_PageSize.Value = PageSize;
                cmd.Parameters.Add(para_PageSize);            SqlParameter para_PageIndex = new SqlParameter();
                para_PageIndex.ParameterName = "@PageCurrent";
                para_PageIndex.SqlDbType = SqlDbType.Int;
                para_PageIndex.Direction = ParameterDirection.Input;
                para_PageIndex.Value = PageIndex;
                cmd.Parameters.Add(para_PageIndex);
                SqlParameter para_strWhere = new SqlParameter();
                para_strWhere.ParameterName = "@Where";
                para_strWhere.SqlDbType = SqlDbType.VarChar;
                para_strWhere.Direction = ParameterDirection.Input;
                para_strWhere.Value = strWhere;
                cmd.Parameters.Add(para_strWhere);
                SqlParameter para_ascColumn = new SqlParameter();
                para_ascColumn.ParameterName = "@fieldOrder";
                para_ascColumn.SqlDbType = SqlDbType.VarChar;
                para_ascColumn.Direction = ParameterDirection.Input;
                para_ascColumn.Value = ascColumn;
                cmd.Parameters.Add(para_ascColumn);            SqlParameter para_PageCount = new SqlParameter();
                para_PageCount.ParameterName = "@PageCount";
                para_PageCount.SqlDbType = SqlDbType.Int;
                para_PageCount.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(para_PageCount);
                try
                {
                    SqlDataAdapter dpt = new SqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    dpt.Fill(ds);
                    retValue=(intcmd.Parameters["@PageCount"].Value;
                    return ds.Tables[0];)
                }
                catch (SqlException e)
                {
                    return null;
                } 
       
    方法的调用
    int retValue=0;
    DateTable dt=DataTable getdatatable(参数...,out retValue);这样dt就是你返回的数据集,retValue就是你的返回值
      

  5.   

    用ref可以,也可以用out,区别在于ref要事前要赋值,而out则不需要!
    根据楼主代码加一个out的整型:
    public DataTable getdatatable(string tblName, string strGetFields, string fldName, int PageSize, int PageIndex, string strWhere, string ascColumn,out int a ) 

        .......
        a=100;
        ....
        return ds.Tables[0]; 
    }调用:
      yourClass yClass=new yourClass();
      int a;
      DataTable myT=yClass(参数1,参数2,.....out a);
      Response.Write(a.ToString());//这里就是你需要的a,即100!!
      

  6.   

    用our和ref都可以解决。楼主看下这2个的区别吧。