sql语句问题。让我很头痛
小弟为了用存储过程实现分页在网上搜了个代码实例,按照他(http://www.bccn.net/Article/net/aspx/jszl/200804/7096.html)上面照做的。
当我调试的时候出现如下错误
'=' 附近有语法错误。
关键字 'select' 附近有语法错误。
'=' 附近有语法错误。
小弟对sql知道的比较少,希望指点。
C#代码如下
SqlConnection sqlConn = DB.SqlConn();
SqlDataAdapter sqlAdapter = DB.SqlAdapter("dbo.pr_pagination", sqlConn);
DataSet ds = DB.Ds();
sqlAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
sqlAdapter.SelectCommand.Parameters.Add("@tablelist", SqlDbType.NVarChar, 400).Value = "userlogin,commenttitle,commentcontent";
sqlAdapter.SelectCommand.Parameters.Add("@tablename", SqlDbType.NVarChar, 100).Value = "users,usercomment";
sqlAdapter.SelectCommand.Parameters.Add("@selectwhere", SqlDbType.NVarChar, 4000).Value = "where d=1";
sqlAdapter.SelectCommand.Parameters.Add("@selectorderid", SqlDbType.NVarChar, 50).Value = "userid,usercommendid";
sqlAdapter.SelectCommand.Parameters.Add("@selectorder", SqlDbType.NVarChar, 400).Value = "order by commenttime asc";
sqlAdapter.SelectCommand.Parameters.Add("@intpageno", SqlDbType.Int).Value = pageNo;
sqlAdapter.SelectCommand.Parameters.Add("@intpagesize", SqlDbType.Int).Value = pageSize;
sqlAdapter.SelectCommand.Parameters.Add("@recordcount", SqlDbType.Int).Direction = ParameterDirection.Output;
sqlAdapter.SelectCommand.Parameters.Add("rowcount", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
sqlAdapter.Fill(ds, "dbo.pr_pagination");
this.rptComment.DataSource = ds.Tables["dbo.pr_pagination"];
this.rptComment.DataBind();
一下是存储过程代码
use DIS
go
if exists (select 1 from sysobjects where id=OBJECT_ID('dbo.pr_pagination') and type='P')
drop procedure dbo.pr_pagination
go
create procedure dbo.pr_pagination
(
@tablelist nvarchar(400), --搜索表的字段
@tablename nvarchar(100), --搜索表的名称
@selectwhere nvarchar(4000), --搜索条件,注意:不用再写where了
@selectorderid nvarchar(50) output, --表主键字段名称
@selectorder nvarchar(400), --排序,可以使用多字段排序,但主键字段必须放在最前面,也可以不写
@intpageno int=1, --页号
@intpagesize int=1, --每页显示数
@recordcount int output --总记录数(存储过程输出参数)
)
as
declare @tmpselect nvarchar(600)
declare @tmp nvarchar(600)
set nocount on --当为on时表示不返回计数(表示受sql语句影响的行数),当为off时表示返回计数
set @tmpselect='select @recordcount=count(*) from '+@tablename+''+@selectwhere
execute sp_executesql @tmpselect, --执行上面的sql语句
N'@recordcount int output', --执行输出数据的sql语句,output出总记录数
@recordcount output
if(@recordcount=0) --如何没有数据,则返回0
return 0
--判断页数是否正确
if(@intpageno-1)*@intpagesize>@recordcount --页号大于总页数,返回错误
return -1
set nocount off --打开计数
if @selectwhere !=''
begin
set @tmpselect='select top'+STR(@intpagesize)+''+@tablelist
+'from'+@tablename
+'where'+@selectorderid
+'not in(select top '+STR((@intpageno-1)*@intpagesize)+''+@selectorderid
+'from'+@tablename+''+@selectwhere+''+@selectorder+') and '+@selectwhere+''+@selectorder
end
else
begin
set @tmpselect='select top'+str(@intpagesize)+''+@tablelist
+'from'+@tablename
+'where'+@selectorderid
+'not in(select top '+STR((@intpageno-1)*@intpagesize)+''+@selectorderid
+'from'+@tablename+''