不知哪儿写错了解决思路

不知哪儿写错了

public DataSet GetMessageInfoById(int id, int num)
         {
             string sqlStr = @"SELECT top @num RestaurantMessage.rmessageId as messageid, messageTime,messageContent,
RestaurantMessage.memberId as memberId,
memberNickName ,
memberHeadPhoto,
RestaurantMessageReply.messageReplyContent as messageReplyContent

FROM 

[RestaurantMessage] left join [Member] on RestaurantMessage.memberid=Member.Memberid 

left join RestaurantMessageReply on RestaurantMessage.rmessageId=RestaurantMessageReply.rmessageId

where [restaurantId]=@id order by RestaurantMessage.[rmessageId] desc";

             SqlParameter[] sqlParas = {
                                           new  SqlParameter("@id",SqlDbType.NVarChar),
                                           new  SqlParameter("@num", SqlDbType.NVarChar)
                                       };
             sqlParas[0].Value = id;
             sqlParas[1].Value = num;

             return DbHelper.Query(sqlStr, sqlParas);

         }

之前没啥问题,我就加了一个参数@num,不知哪儿写错了,取不到值了。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

这。。。不知哪儿写错了解决思路


你试试,加上括号,也就是top 变量,那么必须要加上括号,比如:

declare @num int

set @num = 10

select top @num *
from sys.objects
/*
消息 102,级别 15,状态 1,第 7 行
'@num' 附近有语法错误。

*/


加上括号就对了,不会报错:
declare @num int

set @num = 10

select top (@num) *
from sys.objects

试了一下,确实加个括号,有时不需要加括号,有时又要加


这个是这样的,如果你只是用一个数字,那么可以不加括号,但是由于你上面的代码是用了变量的,也就是动态的,不是静态的数字,所以要加上括号哈,这个就是一个语法习惯。