请问大家下面这个SQL分页存储过程我使用VB.NET如何调用

蛋蛋の忧伤 2011-05-20 11:20:22
我要把记录集放到一个DataGridView里,但是第只能得到第一个记录集,当然如下所说是个空集合,但是我怎么才能得到第2个集合呢?

请看我调用的方法请问我如何得到第2个结果集合呢然后放入DataGridView呢??愁死我了


'调用分页的存储过程
Public Function GetSQLDataTable_Proc_forFenYe2(ByVal sql, ByVal PageCurrent, ByVal PageSize, ByVal PageCount) As DataTable
'定义命令对象,并使用储存过程
Dim myCommand As New SqlClient.SqlCommand
myCommand.CommandType = CommandType.StoredProcedure
myCommand.CommandText = "sp_PageView"
Dim conn As New SqlClient.SqlConnection
conn.ConnectionString ="字符串连接数据库这里屏蔽"
myCommand.Connection = conn
'定义一个数据适配器,并设置参数
Dim myDapter As New SqlClient.SqlDataAdapter(myCommand)
myDapter.SelectCommand.Parameters.Add("@sql", SqlDbType.Text).Value = sql
myDapter.SelectCommand.Parameters.Add("@PageCurrent", SqlDbType.Int).Value = PageCurrent
myDapter.SelectCommand.Parameters.Add("@PageSize", SqlDbType.Int).Value = PageSize
myDapter.SelectCommand.Parameters.Add("@PageCount", SqlDbType.Int).Value = PageCount
Dim dt As New DataTable
Try
myDapter.Fill(dt)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return dt
End Function




/*
--利用SQL未公开的存储过程实现分页
方法简单且效率高,已知的问题就是要多返回一个空的记录集
解决的方法是在前台调用时,用set recordset=recordset.nextrecordset
的方法跳过第一个记录集
此方法由J9988提供,改成了方便调用的存储过程
--邹建2004.05(引用请保留此信息)--*/


--缺点是返回2张表,第一张是空表,第二张才有数据

/*--调用示例
declare @PageCount int
exec sp_PageView
@sql='select * from sysobjects',
@PageCurrent=2,
@PageCount=@PageCount out
SELECT @PageCount
--*/
Create PROC [dbo].[sp_PageView]
@sql ntext, --要执行的sql语句
@PageCurrent int=1, --要显示的页码
@PageSize int=10, --每页的大小
@PageCount int OUTPUT --总页数
AS
SET NOCOUNT ON
DECLARE @p1 int
--初始化分页游标
EXEC sp_cursoropen
@cursor=@p1 OUTPUT,
@stmt=@sql,
@scrollopt=1,
@ccopt=1,
@rowcount=@PageCount OUTPUT

--计算总页数
IF ISNULL(@PageSize,0)<1
SET @PageSize=10
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
IF ISNULL(@PageCurrent,0)<1 OR ISNULL(@PageCurrent,0)>@PageCount
SET @PageCurrent=1
ELSE
SET @PageCurrent=(@PageCurrent-1)*@PageSize+1

--显示指定页的数据
EXEC sp_cursorfetch @p1,16,@PageCurrent,@PageSize

--关闭分页游标
EXEC sp_cursorclose @p1

...全文
44 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
threenewbee 2011-05-21
上面的代码不行么?

也可以作为返回值,看看,http://blog.csdn.net/devidpitoushi/archive/2009/03/24/4019321.aspx

你在 ds 那里下一个断点,看返回几个表。
回复
蛋蛋の忧伤 2011-05-20
不好意思刚才还忘记了一个问题
我在查询分析器里调用个这个分页存储过程
得到3个记录集
第一个是空,第2个我的结果,第3个是移动多少页,请问我如果在我VB.NET方法里把第3个结果也放入我的dataset里呢??



declare @PageCount int

exec sp_PageView
@sql='select * from buserinfo',@PageCurrent=3,@PageCount=@PageCount out

SELECT @PageCount


-------------------------
方法
'调用分页的存储过程
Public Function GetSQLDataTable_Proc_forFenYe2(ByVal sql, ByVal PageCurrent, ByVal PageSize, ByVal PageCount) As DataSet
'定义命令对象,并使用储存过程
Dim myCommand As New SqlClient.SqlCommand
myCommand.CommandType = CommandType.StoredProcedure
myCommand.CommandText = "sp_PageView"
Dim conn As New SqlClient.SqlConnection
conn.ConnectionString ="字符串连接数据库这里屏蔽"
myCommand.Connection = conn
'定义一个数据适配器,并设置参数
Dim myDapter As New SqlClient.SqlDataAdapter(myCommand)
myDapter.SelectCommand.Parameters.Add("@sql", SqlDbType.Text).Value = sql
myDapter.SelectCommand.Parameters.Add("@PageCurrent", SqlDbType.Int).Value = PageCurrent
myDapter.SelectCommand.Parameters.Add("@PageSize", SqlDbType.Int).Value = PageSize
myDapter.SelectCommand.Parameters.Add("@PageCount", SqlDbType.Int).Value = PageCount
Dim ds As New DataSet
Try
myDapter.Fill(ds)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return ds
End Function

页面显示想要的结果如下:

’这里是内容
Me.DataGridView1.DataSource = ds.Tables(1)
‘总页数
Dim pageCount As Integer = ds.Tables(2).Rows(0).Item(0)





回复
蛋蛋の忧伤 2011-05-20
你好有才啊,呵呵我怎么就没有想到呢?呵呵老想着datetable返回了呵呵
回复
threenewbee 2011-05-20
把数据放入 DataSet。然后第二个结果集在 ds.Tables(1) 里面。
回复
相关推荐
发帖
VB
创建于2007-09-28

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2011-05-20 11:20
社区公告
暂无公告