asp.net c#必须声明标量变量错误

本文关键字:标量 变量 错误 声明 net asp | 更新日期: 2023-09-27 18:11:26

我在我的项目中使用查询字符串,除了这个错误:

必须声明标量变量"@cAND"

这是我的代码:

            string connectionString = WebConfigurationManager.ConnectionStrings["Mydb"].ConnectionString;
            SqlConnection con = new SqlConnection(connectionString);
            searchKey.Text = Request.QueryString["n"];
            try
            {
                // Try to open the connection.
                con.Open();
                SqlCommand viewH = new SqlCommand();
                viewH.Connection = con;
                String sql = @"SELECT * FROM hotels ";

                if (Request.QueryString["n"] != "" && Request.QueryString["n"] != null)
                {
                    sql += "WHERE h_name LIKE '%' + @n + '%'";
                    viewH.Parameters.AddWithValue("@n", Request.QueryString["n"]);
                }
                else
                    sql += "WHERE h_name LIKE '%%' ";                
                if (Request.QueryString["c"] != "" && Request.QueryString["c"] != null)
                {
                    sql += "AND h_country = @c";
                    viewH.Parameters.AddWithValue("@c", Request.QueryString["c"]);
                }
                if (Request.QueryString["f"] != "" && Request.QueryString["f"] != null)
                {
                    sql += "AND h_price > @f";
                    viewH.Parameters.AddWithValue("@f", Convert.ToInt32(Request.QueryString["f"]));
                }
                if (Request.QueryString["t"] != "" && Request.QueryString["t"] != null)
                {
                    sql += "AND h_price <@t";
                    viewH.Parameters.AddWithValue("@t", Convert.ToInt32(Request.QueryString["t"]));
                }
                if (Request.QueryString["s"] != "" && Request.QueryString["s"] != null)
                {
                    sql += "AND h_stars = @s";
                    viewH.Parameters.AddWithValue("@s", Convert.ToInt32(Request.QueryString["s"]));
                }
                viewH.CommandText = sql;          
                SqlDataReader data = viewH.ExecuteReader();
        htmlStr = new StringBuilder("");
                while (data.Read())
                {... etc ... }

错误出现时,我使用(s)查询字符串在我的网站,如

example.com/hotels.aspx ? c = sy& s = 1

但是如果我使用this链接:example.com/hotels.aspx ? s = 1没有问题

asp.net c#必须声明标量变量错误

可能是当您构建sql字符串时,您没有在c之后添加空格,因此您将其与以下AND连接?