首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

调用分页的存储过程 回到0行数据

2013-08-16 
调用分页的存储过程 返回0行数据create procedure DivPage@strSql varchar(800),@nPageSize int,@nPageCou

调用分页的存储过程 返回0行数据


create procedure DivPage
@strSql varchar(800),
@nPageSize int,
@nPageCount int
as
    SET NOCOUNT ON
    DECLARE @P1 INT,
    @nRowCount INT

  --//注意 :@scrollopt = 1 会取得Select 的时候的总行数 
    EXEC sp_cursoropen @P1 OUTPUT, @strSql, @scrollopt = 2, @ccopt = 335873, @rowcount = @nRowCount OUTPUT

    IF (@P1 != 0)
    BEGIN
--Select @nRowCount AS nRecordCount, ceiling(1.0 * @nRowCount / @nPageSize) AS nPageCount, @nPageCount AS nPage
SET @nPageCount = (@nPageCount - 1) * @nPageSize + 1
EXEC sp_cursorfetch @P1, 32, @nPageCount, @nPageSize  
EXEC sp_cursorclose @P1
    END
GO



 using(comm.Connection =new SqlConnection(DBCommon.constr) )
    {
    string query = "select * from person";
       comm.Connection.Open();
       comm.CommandText = "DivPage";
       comm.CommandType = CommandType.StoredProcedure;
   comm.Parameters.Add(new SqlParameter("@strsql", query));
   comm.Parameters.Add(new SqlParameter("@nPageSize",10));
   comm.Parameters.Add(new SqlParameter("@nPageCount",1));
   SqlDataAdapter da = new SqlDataAdapter();
       da.SelectCommand = comm;
       da.Fill(dt); //结果dt为空没有结果 在数据库直接执行 exec DivPage 'select * from person',10,1 能出结果



[解决办法]
/// <summary>
    /// 获取DataSet对象
    /// </summary>
    /// <param name="queryString">T-SQL语句</param>


    /// <param name="commandType">命令类型</param>
    /// <param name="param">T-SQL参数</param>
    /// <returns>DataSet对象</returns>
    public static DataSet GetDataSet(string queryString, CommandType commandType, params SqlParameter[] param)
    {
        DataSet ds = new DataSet();
        using (SqlConnection con = new SqlConnection(ConnectionString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter(queryString, con);
            adapter.SelectCommand.CommandType = commandType;

            if (param != null)
            {
                for (int i = 0; i < param.Length; i++)
                {
                    adapter.SelectCommand.Parameters.Add(param[i]);
                }
            }

            try
            {
                adapter.Fill(ds);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                adapter.Dispose();
                adapter = null;


            }
        }
        return ds;
    }
用这个试试
[解决办法]
用这个方法来调用

/// <summary>
        /// 执行有参的查询 返回DataTable
        /// </summary>
        /// <param name="cmdtext">存储过程名称或SQL语句</param>
        /// <param name="ct">命令类型</param>
        /// <param name="para">参数数组</param>
        /// <returns>返回DataTable</returns>
        public static DataTable ReturnDataTable(string cmdtext, CommandType ct, SqlParameter[] para)
        {
            DataTable dt = new DataTable();
            cmd = new SqlCommand(cmdtext, GetConn());
            cmd.CommandType = ct;
            cmd.Parameters.AddRange(para);
            SqlDataReader dr = null;
            using (dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(dr);
            }
            return dt;
        }


给你个调用的demo

  public int TeacherApp_add(M_Model.Parameters parameter)
        {
            IDataParameter[] iData = new SqlParameter[5];
            iData[0] = new SqlParameter("@TableName", "S_Appraisalnote");
            iData[1] = new SqlParameter("@sqlcolumns", parameter.Sqlcolumns);


            iData[2] = new SqlParameter("@sqlstrpara", parameter.NewSqlstrpara);
            iData[3] = new SqlParameter("@S_id", parameter.S_id);
            iData[4] = new SqlParameter("@C_id", parameter.ClassID);
            DataComponent dac = new DataComponent();
            int value = dac.ExecuteNonQuery("Proc_InsertS_Appraisalnote",CommandType.StoredProcedure,iData);
            dac.Close();
            return value;
        }

热点排行