读书人

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

发布时间: 2013-08-16 14:29:57 作者: rapoo

调用分页的存储过程 返回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;
}

读书人网 >asp.net

热点推荐