Procedure expects parameter '@parameters' of type 'ntext/nchar/nvarchar'.

xzr2004 2007-05-24 11:28:25
create proc up_gettopiclist
@a_tablelist varchar(200),
@a_tablename varchar(200),
@a_selectwhere varchar(500),
@a_selectorderid varchar(20),
@a_selectorder varchar(50),
@a_intpageno int,
@a_intpagesize int,
@recordcount int output
as
/*定义局部变量*/
declare @intbeginid int
declare @intendid int
declare @introotrecordcount int
declare @introwcount int
declare @tmpselect nvarchar(600)
/*关闭计数*/
set nocount on

/*求总共根贴数*/

select @tmpselect = 'set nocount on;select @spintrootrecordcount = count(*) from '+@a_tablename+' '+@a_selectwhere
execute sp_executesql
@tmpselect,
N'@spintrootrecordcount int output',
@spintrootrecordcount=@introotrecordcount output

select @recordcount = @introotrecordcount

if (@introotrecordcount = 0) --如果没有贴子,则返回零
return 0

/*判断页数是否正确*/
if (@a_intpageno - 1) * @a_intpagesize > @introotrecordcount
return (-1)

/*求开始rootid*/
set @introwcount = (@a_intpageno - 1) * @a_intpagesize + 1
/*限制条数*/

select @tmpselect = 'set nocount on;set rowcount @spintrowcount;select @spintbeginid = '+@a_selectorderid+' from '+@a_tablename+' '+@a_selectwhere+' '+@a_selectorder
execute sp_executesql
@tmpselect,
N'@spintrowcount int,@spintbeginid int output',
@spintrowcount=@introwcount,@spintbeginid=@intbeginid output


/*结束rootid*/
set @introwcount = @a_intpageno * @a_intpagesize
/*限制条数*/

select @tmpselect = 'set nocount on;set rowcount @spintrowcount;select @spintendid = '+@a_selectorderid+' from '+@a_tablename+' '+@a_selectwhere+' '+@a_selectorder
execute sp_executesql
@tmpselect,
N'@spintrowcount int,@spintendid int output',
@spintrowcount=@introwcount,@spintendid=@intendid output


if @a_selectwhere='' or @a_selectwhere is null
select @tmpselect = 'set nocount off;set rowcount 0;select '+@a_tablelist+' from '+@a_tablename+' where '+@a_selectorderid+' between '
else
select @tmpselect = 'set nocount off;set rowcount 0;select '+@a_tablelist+' from '+@a_tablename+' '+@a_selectwhere+' and '+@a_selectorderid+' between '

if @intendid > @intbeginid
select @tmpselect = @tmpselect+'@spintbeginid and @spintendid'+' '+@a_selectorder
else
select @tmpselect = @tmpselect+'@spintendid and @spintbeginid'+' '+@a_selectorder

execute sp_executesql
@tmpselect,
N'@spintendid int,@spintbeginid int',
@spintendid=@intendid,@spintbeginid=@intbeginid

return(@@rowcount)
--select @@rowcount
go

ASP.NET调用:
string tablist = "b.BigCategoryName_En as bname,ss.ModelID as ssid,ss.Model as ssname,s.CategoryName_en as sname,"
+ "p.d1 as i1,p.d2 as i2, p.l1 as o1, p.l2 as o2,p.d3 as i3 ,p.d4 as i4,p.l3 as o3, p.l4 as o4";

string tabname = "BigCategories b inner join Categories s on b.BigCategoryID = s.BigCategoryID "
+ "inner join Models ss on s.CategoryID = ss.CategoryID inner join GGoods p on ss.ModelID = p.ModelID";

string strorderid = "p.goodscode";

string strorder = "order by p.goodscode";

SqlCommand cmd = new SqlCommand("sp_GetRecordsFromPager", conn);
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter tablelist = new SqlParameter("@a_tablelist", SqlDbType.VarChar, 200);
tablelist.Value = tablist;
cmd.Parameters.Add(tablelist);

SqlParameter tablename = new SqlParameter("@a_tablename", SqlDbType.VarChar, 200);
tablename.Value = tabname;
cmd.Parameters.Add(tablename);

SqlParameter selectwhere = new SqlParameter("@a_selectwhere", SqlDbType.VarChar, 200);
selectwhere.Value = strwhere;
cmd.Parameters.Add(selectwhere);

SqlParameter selectorderid = new SqlParameter("@a_selectorderid", SqlDbType.VarChar, 50);
selectorderid.Value = strorderid;
cmd.Parameters.Add(selectorderid);

SqlParameter selectorder = new SqlParameter("@a_selectorder", SqlDbType.VarChar, 50);
selectorder.Value = strorder;
cmd.Parameters.Add(selectorder);

SqlParameter intpageno = new SqlParameter("@a_intpageno", SqlDbType.Int);
intpageno.Value = pageno;
cmd.Parameters.Add(intpageno);

SqlParameter intpagesize = new SqlParameter("@a_intpagesize", SqlDbType.Int);
intpagesize.Value = 15;
cmd.Parameters.Add(intpagesize);

//SqlParameter recordcount = new SqlParameter("@recordcount", SqlDbType.Int);
//recordcount.Direction = ParameterDirection.Output;
cmd.Parameters.Add("@recordcount", SqlDbType.Int);
cmd.Parameters["@recordcount"].Direction = ParameterDirection.Output;

SqlParameter rowcount = new SqlParameter("rowcount", SqlDbType.Int);
rowcount.Direction = ParameterDirection.ReturnValue;
this.gv_Product.DataSource = cmd.ExecuteReader();//报错Procedure expects parameter '@parameters' of type 'ntext/nchar/nvarchar'.
this.gv_Product.DataBind();
intrecordcount = (int)cmd.Parameters["@recordcount"].Value;
introwcount = (int)cmd.Parameters["rowcount"].Value;
...全文
489 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinzaiya 2011-11-15
  • 打赏
  • 举报
回复
参数类型不匹配
解决方法:
sqlParameter tablelist = new SqlParameter( "@a_tablelist ", SqlDbType.VarChar, 200)
变成
sqlParameter tablelist = new SqlParameter( N"@a_tablelist ", SqlDbType.VarChar, 200)
上面只是举个例,至于你带入了这么多个参数中的那个需要自己去调试,省事的话都加上。
加N是因为错误提示为需要'ntext/nchar/nvarchar',需要什么就给什么。
stou 2007-06-06
  • 打赏
  • 举报
回复
帮顶
xzr2004 2007-05-24
  • 打赏
  • 举报
回复
没人回答吗
xzr2004 2007-05-24
  • 打赏
  • 举报
回复
//报错Procedure expects parameter '@parameters' of type 'ntext/nchar/nvarchar'.
hsj20041004 2007-05-24
  • 打赏
  • 举报
回复
什么问题?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧