存储过程,在线等
CREATE PROCEDURE dbo.SelectConversations
(
@filter varchar(400),
@sort varchar(400),
@pageNum int,
@pageSize int
)
@filter 表示where限制,@sort 是orger by限制, 要求返回第pageNum页
我的代码如下:
AS
BEGIN
SET NOCOUNT ON
DECLARE @Where varchar(500)
DECLARE @OrderBy varchar(400)
DECLARE @SQL varchar(1000)
SET @Where = 'WHERE Conversation.ConversationTypeID = ConversationType.ConversationTypeID'
+ case when (@filter <> '') then (' AND ' + @filter) end
SET @OrderBy = case when (@sort = '') then '' else ('ORDER BY ' + @sort) end
SET @SQL = '
DECLARE
@ubound INT,
@lbound INT,
@pages INT,
@rows INT,
@pagenumber INT,
@size INT
SET @pagenumber = ' + str(@pageNum) +
' SET @size = ' + str(@pageSize) +
' SELECT @rows = COUNT(*), @pages = COUNT(*) / @size FROM
Conversation, ConversationType ' + @Where +
'IF @rows % ' + str(@pageSize) + '!= 0 SET @pages = @pages + 1
IF ' + str(@pageNum) + ' < 1 SET @pagenumber = 1
IF ' + str(@pageNum) + ' > @pages SET @pagenumber = @pages
SET @ubound = ' + str(@pageSize) + ' * @pagenumber
SET @lbound = @ubound - (' + str(@pageSize) + ' - 1)
SELECT
CurrentPage = @pagenumber,
TotalPages = @pages,
TotalRows = @rows
SELECT
A.ConversationID,
A.ConversationStatusID,
A.ConversationTypeID,
A.InitiationDateTime,
B.Name
FROM
Conversation A,
ConversationType B '
+ @Where +
' GROUP BY
A.ConversationID,
A.ConversationStatusID,
A.ConversationTypeID,
A.InitiationDateTime,
B.Name
HAVING
COUNT(*) BETWEEN @lbound AND @ubound
' + @OrderBy + ' '
Exec(@SQL)
END
但现在问题问题是
// Create IDbCommand
SqlCommand command = new SqlCommand("SelectConversations", connection);
// set its type to CommandType.StoredProcedure
command.CommandType = CommandType.StoredProcedure;
// Add four parameters
.......
// Create new adapter with the IDbCommand
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.SelectCommand = command;
// Create DataSet that will hold results
DataSet dataset = new DataSet();
// Fill data set
adapter.Fill(dataset);
return dataset;
dataset中没有table。 如果在stored procedure中不用Exec(),直接用select是可返回table的,但是直接用select就我没法加上 where 和 order by 参数。
等待高手们提供方法。
(
@filter varchar(400),
@sort varchar(400),
@pageNum int,
@pageSize int
)
@filter 表示where限制,@sort 是orger by限制, 要求返回第pageNum页
我的代码如下:
AS
BEGIN
SET NOCOUNT ON
DECLARE @Where varchar(500)
DECLARE @OrderBy varchar(400)
DECLARE @SQL varchar(1000)
SET @Where = 'WHERE Conversation.ConversationTypeID = ConversationType.ConversationTypeID'
+ case when (@filter <> '') then (' AND ' + @filter) end
SET @OrderBy = case when (@sort = '') then '' else ('ORDER BY ' + @sort) end
SET @SQL = '
DECLARE
@ubound INT,
@lbound INT,
@pages INT,
@rows INT,
@pagenumber INT,
@size INT
SET @pagenumber = ' + str(@pageNum) +
' SET @size = ' + str(@pageSize) +
' SELECT @rows = COUNT(*), @pages = COUNT(*) / @size FROM
Conversation, ConversationType ' + @Where +
'IF @rows % ' + str(@pageSize) + '!= 0 SET @pages = @pages + 1
IF ' + str(@pageNum) + ' < 1 SET @pagenumber = 1
IF ' + str(@pageNum) + ' > @pages SET @pagenumber = @pages
SET @ubound = ' + str(@pageSize) + ' * @pagenumber
SET @lbound = @ubound - (' + str(@pageSize) + ' - 1)
SELECT
CurrentPage = @pagenumber,
TotalPages = @pages,
TotalRows = @rows
SELECT
A.ConversationID,
A.ConversationStatusID,
A.ConversationTypeID,
A.InitiationDateTime,
B.Name
FROM
Conversation A,
ConversationType B '
+ @Where +
' GROUP BY
A.ConversationID,
A.ConversationStatusID,
A.ConversationTypeID,
A.InitiationDateTime,
B.Name
HAVING
COUNT(*) BETWEEN @lbound AND @ubound
' + @OrderBy + ' '
Exec(@SQL)
END
但现在问题问题是
// Create IDbCommand
SqlCommand command = new SqlCommand("SelectConversations", connection);
// set its type to CommandType.StoredProcedure
command.CommandType = CommandType.StoredProcedure;
// Add four parameters
.......
// Create new adapter with the IDbCommand
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.SelectCommand = command;
// Create DataSet that will hold results
DataSet dataset = new DataSet();
// Fill data set
adapter.Fill(dataset);
return dataset;
dataset中没有table。 如果在stored procedure中不用Exec(),直接用select是可返回table的,但是直接用select就我没法加上 where 和 order by 参数。
等待高手们提供方法。
...全文
相关推荐
SQL 2005 数据库设计 在线考试循环抽题存储过程
在数据库中设计抽题规则,然后按照规则进行随机抽取规定抽题数目,完全用存储过程书写 ,非常实用!
利用SQL Server存储过程提高在线考试系统的性能
利用SQL Server作为数据库管理平台开发高校通用计算机在线考试软件系统时,由于数据量较大,最应关注的是软件系统的运行速度、性能和可维护性等指标。如果采用常规的程序设计方案,会造成网络通信数据量大、业务逻辑处理速度慢、系统运行效率低等问题。为解决这些问题,软件系统中相关业务逻辑设计采用存储过程的方法实现,大大减少了网络流量,提高了系统的性能和可维护性。
利用SQL Server存储过程提高在线考试系统的性能.pdf
利用SQL Server存储过程提高在线考试系统的性能.pdf
ASP.NET在线报修系统源码,AJAX,数据全部存储过程操作
ASP.NET开发的在线报修系统源码 整个程序分三个部分 1.后台系统管理系统 2.维修人员系统 3.前台报修系统 AJAX实现数据更新,数据操作全部使用存储过程!如有疑问请Q:502522272
在线考试系统中基于数据库存储过程的组卷策略(1).docx
在线考试系统中基于数据库存储过程的组卷策略(1).docx


