首页 新闻 会员 周边 捐助

SqlCommand top 查询 占位符使用????

0
悬赏园豆:30 [已解决问题] 解决于 2010-11-08 08:57

 SqlConnection con = new SqlConnection("server=C23471744F6D4BC;database=OA_DB;integrated security=true");            

string sql = "declare @pagesize int";           

 sql += " declare @str varchar(1000) ";            

sql += "set @str='select top '+convert(varchar(4),@pagesize)+' * from TabMenu' ";            

sql += "exec (@str)";            

con.Open();            

SqlCommand command = new SqlCommand(sql,con);            

SqlDataReader reader = command.ExecuteReader();            command.Parameters.AddWithValue("@pagesize", 3);           

 List<Menu> list = new List<Menu>();            

while (reader.Read())            

{                

Menu menu = new Menu();                

menu.Id = Convert.ToInt32(reader["Id"].ToString());               

 list.Add(menu);            

}            

con.Close();

直接说问题: 首先申明 数据表连接正确,sql语句正确,代码没有错误。

问题在于 我怎样将@pagesize 这个参数传递进去,注意这的参数是 select top @pagesize * from  传递的参数是查询多少行,不是查询字段的值,希望大家这里看清楚。

 

我要怎样才能将这个参数传递进去,或者怎样修改这个sql语句可以查询达到相同的效果。

注意规则: (1)不用用什么拼接sql语句的方式,@pagesize 必须以参数占位符的方式传递

       (2) 不能使用存储过程

     (3) 你可以修改sql语句的格式,但是@pagesize 必须是占位符参数

说了这么多 希望大家明白,就帮我解决一下吧

贺臣的主页 贺臣 | 菜鸟二级 | 园豆:307
提问于:2010-10-26 22:52
< >
分享
最佳答案
0

我这么告诉你,SQL中的 declare @pagesize int 语句,就等同于

SqlParameter parm = new SqlParameter("@PageSize",SqlDbType.Int);

所以,把你的declare set exec 之类的都去掉,直接使用代码模式的参数配合

直接的 select 语句。

收获园豆:15
Launcher | 高人七级 |园豆:45050 | 2010-10-27 09:12
多谢这位仁兄的回答,不过你没有深入去考虑过这个问题,在sql2005中 top 后面的参数是不能这样传递的,你可以看看邀月给的两个地址 看了你就明白了
贺臣 | 园豆:307 (菜鸟二级) | 2010-10-27 10:47
@贺臣:那是他不会用.注意你的 sql 语句的写法,用()把top后的参数包起来,如下: select top (@count) * from orders
Launcher | 园豆:45050 (高人七级) | 2010-10-27 13:26
其他回答(2)
0

SqlDataReader reader = command.ExecuteReader();            command.Parameters.AddWithValue("@pagesize", 3);   

换一下顺序,变为

command.Parameters.AddWithValue("@pagesize", 3);   

SqlDataReader reader = command.ExecuteReader(); 

然后把

declare @pagesize int  这句sql删除

沉默的糕点 | 园豆:1786 (小虾三级) | 2010-10-26 23:20
0

在SQL 2008之前的版本中,top后不可以加变量

http://www.cnblogs.com/downmoon/archive/2007/12/29/1019686.html

以后版本,看

http://www.cnblogs.com/downmoon/archive/2010/10/12/1849248.html

收获园豆:15
邀月 | 园豆:25475 (高人七级) | 2010-10-26 23:38
谢谢你的回答,你的做法是正确的,但是我现在不能使用存储过程,我必须在C#代码中使用sql语句 而且使用占位符传递参数
支持(0) 反对(0) 贺臣 | 园豆:307 (菜鸟二级) | 2010-10-27 07:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册