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

C#的SQL int参数附近有错误
字符串参数没有问题,问题在于整型变量,将字符串语句中的@number直接换成1是没有问题的,说明语法没有问题,那么整型参数是不是有什么细节需要设置?
protected void Page_Load(object sender,EventArgs e)
{
    if(!IsPostBack)
    {
        SqlDataReader MyReader;
        SqlParameter CityName;
        SqlParameter number;

        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DSN_NorthWind"].ConnectionString);
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = "select top @number * from Customers where city=@city";

        number = new SqlParameter();
        number.ParameterName = "@number";
        number.SqlDbType = SqlDbType.Int;
        number.Value = 1;

        CityName = new SqlParameter();
        CityName.ParameterName = "@city";
        CityName.SqlDbType = SqlDbType.VarChar;
        CityName.Value = "Berlin";

        cmd.Parameters.Add(CityName);
        cmd.Parameters.Add(number);

        conn.Open();
        MyReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        GridView1.DataSource = MyReader;
        GridView1.DataBind();

        cmd.Dispose();
        conn.Dispose();
    }
}

'@number' 附近有语法错误。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Data.SqlClient.SqlException: '@number' 附近有语法错误。

------解决方案--------------------
http://stackoverflow.com/questions/1936496/sql-how-do-i-use-parameter-for-top-like-in-select-top-amount
2008以下可以加上括号
select top (@number) 
------解决方案--------------------
语法有问题,如2楼所说,要加括号: (@number)