【问题标题】:C# MySqlParameter problemC# MySqlParameter 问题
【发布时间】:2010-02-23 22:35:01
【问题描述】:

(int) faultsGroup 为 0 或 1,但我总是收到此错误:列 'FaultGroup' 不能为空

有人告诉我为什么吗?语法看起来不错。

MySqlCommand cmdAdd = new MySqlCommand("INSERT INTO Faults (" +
        "  FaultGroup, Text, Date, IP" +
        ") VALUES (" +
        "  @FaultGroup, @Text, @Date, @IP" +
        ")", conn);

MySqlParameter paramFaultGroup = new MySqlParameter("@FaultGroup", MySqlDbType.Int32);
FaultsGroup faultsGroup = (FaultsGroup) Enum.Parse(typeof (FaultsGroup), myFault.FaultGroup);
paramFaultGroup.Value = (int) faultsGroup;
cmdAdd.Parameters.Add(paramFaultGroup);

cmdAdd.ExecuteNonQuery();

【问题讨论】:

  • 您应该通过单击答案旁边的空心复选标记来接受您的问题的答案。

标签: c# .net mysql mysql-parameter


【解决方案1】:

我已经有大约 6 个月没有使用 MySql(谢天谢地已迁移到 Sql Server),但是,尝试将您的 @ 符号更改为 ?,就像记忆服务一样,这是 MySql 的正确约定,所以:

MySqlCommand cmdAdd = new MySqlCommand(
       "INSERT INTO Faults (FaultGroup, Text, Date, IP)"
       + " VALUES (?FaultGroup, ?Text, ?Date, ?IP)",
       conn);

MySqlParameter paramFaultGroup = new MySqlParameter("?FaultGroup", MySqlDbType.Int32);
FaultsGroup faultsGroup = (FaultsGroup) Enum.Parse(typeof (FaultsGroup), myFault.FaultGroup);
paramFaultGroup.Value = (int) faultsGroup;
cmdAdd.Parameters.Add(paramFaultGroup);

cmdAdd.ExecuteNonQuery();

【讨论】:

  • 实际上,'@' 符号工作正常,至少对于 MySQL ADO.Net 连接器(我假设 OP 正在使用)。
  • 问题出在 ado.net 连接器的版本中。我使用的是 5.1.7 现在我使用的是 v6。谢谢大家的帮助
  • 我怎么知道版本?
猜你喜欢
  • 2012-01-07
  • 1970-01-01
  • 2011-08-27
  • 2013-04-10
  • 2019-11-14
  • 1970-01-01
  • 2010-11-05
  • 2011-02-20
  • 2011-08-14
相关资源
最近更新 更多