【问题标题】:MySQL syntax error using MySqlCommand in ASP.NET在 ASP.NET 中使用 MySqlCommand 的 MySQL 语法错误
【发布时间】:2018-06-01 14:56:36
【问题描述】:

下面是我测试过的 SQL 查询工作正常

Select 
    data_info.user_id, data_info.type_id, data_info.specific_title,
    data_info.content, life_area.type_id, life_area.type_id
From
    data_info 
Left Join
    life_area On data_info.type_id = life_area.id
Where 
    data_info.user_id = '0001'

现在我正在尝试将工作 SQL 转换为 asp.net MySqlCommand,但它无法工作并显示语法错误

MySqlCommand cmd = new MySqlCommand(
    "Select data_info.user_id,data_info.type_id,data_info.specific_title,data_info.content,"+
    "life_area.type_id,life_area.type_id" +
    "FROM data_info LEFT JOIN life_area ON data_info.type_id = life_area.id" +
    "Where data_info.user_id='0001'" , conn);

【问题讨论】:

  • 从代码中打印出 SQL 字符串,并仔细查看,尤其是缺少逗号或空格之类的内容。
  • 我看不到字符串之间的空格,比如... area.type_id" (space?) + "FROM ...
  • 看起来您在选择列表的末尾和初学者的FROM 之间缺少一个空格。我建议改为创建一个逐字字符串(在它前面放一个'@'),这样你就可以包含换行符而不是你目前拥有的串联混乱。同样在将来,您确实应该包含您收到的错误消息。
  • @juharr,由于我刚开始学习asp.net,请多解释一下,谢谢
  • @epiphany 好吧,具体而言,您的查询是“... life_area.type_idFROM ...”,因为您的第二个字符串不以空格结尾,而第三个字符串不以空格开头。如果您在字符串之前放置一个@,它允许它跨越多行,它被称为verbatim string,当您尝试运行此代码时,您会收到一条错误消息,您应该始终在问题中包含错误消息。跨度>

标签: c# mysql asp.net


【解决方案1】:

您将字符串组合在一起,在关键区域没有空格,例如life_area.type_id' + 'FROM data_info'给你life_area.type_idFROM data_info;这使您的 SQL 无效。使用@(verbatim string) 字符串来兑现回车可能是最好的解决方案:

MySqlCommand cmd = new MySqlCommand(
    @"Select data_info.user_id,data_info.type_id,data_info.specific_title,data_info.content,
    life_area.type_id,life_area.type_id
    FROM data_info LEFT JOIN life_area ON data_info.type_id = life_area.id 
    Where data_info.user_id='0001'" , conn);

【讨论】:

  • 它实际上被称为逐字字符串或逐字字符串文字。字符串文字本身意味着其他东西。
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2013-02-04
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多