【问题标题】:Ignoring the @ symbol when running a MySQL command from C#从 C# 运行 MySQL 命令时忽略 @ 符号
【发布时间】:2013-03-31 16:55:30
【问题描述】:

我有以下 MySQL 命令,用于填充足球队最近 6 场比赛的表格:

insert into lastxgames
select team, matchdate, hometeam, awayteam, fthg, ftag
from (
  select
    team, soccerdata.matchdate, hometeam, awayteam, fthg, ftag,
    @teamCounter:=IF(@prevHome=team,@teamCounter+1,1) teamCounter,
    @prevHome:=team
  from soccerdata
    join (
      select distinct matchdate, hometeam team
      from soccerdata
      union 
      select distinct matchdate, awayteam
      from soccerdata
    ) allgames on soccerdata.matchdate = allgames.matchdate
      and (soccerdata.hometeam = allgames.team or soccerdata.awayteam = allgames.team)
    join (select @teamCounter:=0) t
  order by team, soccerdata.matchdate desc
  ) t 
where teamCounter <= 6
order by team, matchdate desc;

我想在 C# 程序中运行它,但是当我这样做时,查询失败,因为 @ 符号被用作查询参数,而不是按照 MySQL 预期的方式处理(MySQL 变量?)。

在我的 C# 程序中,我只是声明一个字符串来保存查询并将其添加到 MySqlCommand:

string insertCommand = @"insert into lastxgames...";
using (MySqlCommand cmdInsert = new MySqlCommand(insertCommand, dcConnection))
{
  cmdInsert.ExecuteNonQuery();
}

有没有办法让 C# 忽略 @ 符号,从而不将 @teamCounter 和 @prevHome 视为查询参数?

【问题讨论】:

  • 你能说明你如何使用示例文本吗?
  • 已编辑以包含一些 c# 使用信息
  • 收到的错误信息是什么?

标签: c# mysql


【解决方案1】:

正确的做法是将其作为数据库中的存储过程并让您的 C# 运行该存储过程。

【讨论】:

  • 我认为可能是这样。
  • 我已将它添加为存储过程,并且在从 MySQL 中调用时它可以按预期工作。但是,当我从我的 C# 程序中调用它时,它会生成错误的答案(太多的记录被复制到表中)。存储过程中没有传递任何参数,所以我完全不明白为什么它的行为方式不同!
  • 进一步分析表明,存储过程在第一次运行时产生了错误的结果,但之后每次都产生了正确的结果!由于 C# 代码始终是第一次调用(在建立连接之后),它总是会产生错误的结果。在 C# 代码中对同一例程进行第二次调用,它按预期工作。
猜你喜欢
  • 1970-01-01
  • 2016-06-09
  • 2010-10-18
  • 1970-01-01
  • 2018-08-12
  • 2011-10-10
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多