日期:2014-05-17  浏览次数:20515 次

'@top' 附近有语法错误。
SqlParameter 无法对sql语句中的单个参数赋值吗?

下面是sql:


create table [testInfo]

(

 id int identity(1,1) not null,

 [name] varchar(50) not null

)

go


insert into [testInfo] values('aaa')

insert into [testInfo] values('bbb')

insert into [testInfo] values('ccc')


下面是程序代码:

  SqlConnection conn = new SqlConnection("server=.;database=testDb;uid=sa;pwd=sasa");

  conn.Open();

  SqlCommand cmd = new SqlCommand("select top @top id from [testInfo]", conn);

  cmd.CommandType = System.Data.CommandType.Text;

  cmd.Parameters.Add(new SqlParameter(){ParameterName="@top", Value=1,DbType=System.Data.DbType.Int32});

  SqlDataReader sdr= cmd.ExecuteReader();

  sdr.Read();

  this.ClientScript.RegisterStartupScript(this.GetType(),"","alert('"+sdr["id"]+"')",true);

  conn.Close();

界面上就一个按钮:

  <asp:Button runat="server" ID="btn"  

  onclick="btn_Click1" />

错误提示是: '@top' 附近有语法错误。


如果把程序代码改成这样就没问题:

  SqlConnection conn = new SqlConnection("server=.;database=testDb;uid=sa;pwd=sasa");

  conn.Open();

  SqlCommand cmd = new SqlCommand("select id from [testInfo] where id=@top", conn);

  cmd.CommandType = System.Data.CommandType.Text;

  cmd.Parameters.Add(new SqlParameter(){ParameterName="@top", Value=1,DbType=System.Data.DbType.Int32});

  SqlDataReader sdr= cmd.ExecuteReader();

  sdr.Read();

  this.ClientScript.RegisterStartupScript(this.GetType(),"","alert('"+sdr["id"]+"')",true);

  conn.Close();


 这样证明top这个sql关键字后的@top无法赋值,为什么会这样?


------解决方案--------------------
可以用变量,要加括号 select top (@top)