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

 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 必须是占位符参数

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

慕盖茨4494581
浏览 482回答 4
4回答

莫回无

SqlDataReader reader = command.ExecuteReader();            command.Parameters.AddWithValue("@pagesize", 3);    换一下顺序,变为 command.Parameters.AddWithValue("@pagesize", 3);    SqlDataReader reader = command.ExecuteReader();  然后把 declare @pagesize int  这句sql删除

拉丁的传说

谢谢你的回答,你的做法是正确的,但是我现在不能使用存储过程,我必须在C#代码中使用sql语句 而且使用占位符传递参数
打开App,查看更多内容
随时随地看视频慕课网APP