ASP.NET中da.Fill(ds)报‘error near '='’错误求助
解决SQL语句'error near '=''错误及购物车添加逻辑优化
先给你说清楚问题出在哪:你遇到的da.Fill(ds)时的error near '='错误,本质是SQL查询里的字符串参数没加单引号。比如当item_name是"香辣鸡腿堡"这种字符串时,你直接拼接出来的SQL是:
select * from food_items where item_name=香辣鸡腿堡
数据库会把香辣鸡腿堡当成字段名,根本找不到这个字段,自然在等号位置报错。而且这种直接拼接用户输入的写法还有致命的SQL注入漏洞,恶意用户能通过构造特殊的QueryString篡改你的SQL,风险极高!
下面是修正后的代码,我同时修复了几个隐藏的小问题:
- 改用参数化查询,彻底解决语法错误和SQL注入
- 统一Session键的大小写(你原来写了
Session["Buyitems"]和Session["buyitems"],大小写不一致会导致后续读取Session失败) - 修正DataTable列名和赋值的不匹配(你定义的是
image列,但赋值用了productimage,会报错) - 添加using语句自动释放数据库连接,避免连接泄漏
- 增加查询结果的判断,防止没有查到商品时访问
Rows[0]报错
if (!IsPostBack) { DataTable dt = new DataTable(); DataRow dr; // 定义DataTable列 dt.Columns.Add("sno"); dt.Columns.Add("itemname"); dt.Columns.Add("price"); dt.Columns.Add("image"); dt.Columns.Add("cost"); dt.Columns.Add("totalcost"); string itemName = Request.QueryString["item_name"]; if (!string.IsNullOrEmpty(itemName)) { if (Session["BuyItems"] == null) { dr = dt.NewRow(); // 使用using自动释放连接 using (SqlConnection scon = new SqlConnection(ConfigurationManager.ConnectionStrings["online food orderingConnectionString"].ConnectionString)) { scon.Open(); // 参数化SQL,避免语法错误和SQL注入 string myquery = "select * from food_items where item_name = @ItemName"; SqlCommand cmd = new SqlCommand(myquery, scon); // 添加参数,指定类型和值 cmd.Parameters.AddWithValue("@ItemName", itemName); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); // 检查是否查询到数据 if (ds.Tables[0].Rows.Count > 0) { dr["sno"] = 1; dr["itemname"] = ds.Tables[0].Rows[0]["item_name"].ToString(); dr["image"] = ds.Tables[0].Rows[0]["image"].ToString(); // 修正列名匹配问题 dr["price"] = ds.Tables[0].Rows[0]["price"].ToString(); dt.Rows.Add(dr); GridView1.DataSource = dt; GridView1.DataBind(); // 统一Session键的大小写 Session["BuyItems"] = dt; } else { // 可以在这里处理商品不存在的情况,比如提示用户 GridView1.DataSource = null; GridView1.DataBind(); } } } } }
最后再提醒几句:
- 永远不要直接拼接用户输入到SQL语句里,参数化查询是标准做法
- 数据库连接、命令这类资源一定要用using包裹,确保自动释放
- 处理Session时要注意键的大小写,C#里Session的键是区分大小写的
内容的提问来源于stack exchange,提问作者ghanshyam Sehgal
相关产品推荐
相关产品推荐

