为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2018-12-06 15:21:11
 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 必须是占位符参数 说了这么多 希望大家明白,就帮我解决一下吧
查看完整描述

4 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

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

换一下顺序,变为

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

SqlDataReader reader = command.ExecuteReader(); 

然后把

declare @pagesize int  这句sql删除

查看完整回答
反对 回复 2019-01-21
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

谢谢你的回答,你的做法是正确的,但是我现在不能使用存储过程,我必须在C#代码中使用sql语句 而且使用占位符传递参数
查看完整回答
反对 回复 2019-01-21
  • 4 回答
  • 0 关注
  • 480 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信