【问题标题】:Why is my MySqlCommand not actually updating my table?为什么我的 MySqlCommand 实际上没有更新我的表?
【发布时间】:2012-05-18 16:26:17
【问题描述】:

我在 Mono 中有以下代码,使用 MySQL 连接器/网络:

try
{
    MatchPersonResult mpr = personServ.MatchPerson(p, "MatchAndStore", null);
    using(MySqlCommand successcmd = new MySqlCommand())
    {
        successcmd.CommandText = "UPDATE myccontacts SET mcid = @mcid, matchresult = @mr, datetimematched = @dtm WHERE id = @id";
        successcmd.Connection = conn;
        successcmd.Parameters.Add("@mcid", MySqlDbType.Int32).Value = int.Parse(mpr.PersonID);
        successcmd.Parameters.Add("@mr", MySqlDbType.Enum).Value = mpr.MatchResultStatus;
        successcmd.Parameters.Add("@dtm", MySqlDbType.DateTime).Value = DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString();
        successcmd.Parameters.Add("@id", MySqlDbType.Int32).Value = person["id"];
        successcmd.ExecuteNonQuery();
        Console.WriteLine(mpr.PersonID);
    }
}

执行查询时,表实际上并没有更新任何内容。我在 Console.WriteLine 调用上设置了一个断点,这样我就可以检查发生了什么,当它被击中时,我使用代码中提到的 id 加载行并且它尚未更新。即使我不调试而只是让代码执行,我也看到数据库没有发生任何事情。为清楚起见 - personServ.MatchPerson 实际上是导入到我的解决方案中的网络参考,因此我可以在另一端检查并确实看到正确的数据已发送过来,并且应该进行数据库更新。

有人知道该怎么做吗?

TIA, 本杰

P.S.:数据库更新的所有 except 都在工作 - 这里的 catch 块(为简洁起见未发布)永远不会被命中。

【问题讨论】:

  • 前后执行“select * from myccontacts where id = @id”会发生什么?你能发布结果吗?你的意思是mycontacts而不是myccontacts
  • person["id"]; 在哪里?应该是Convert.ToInt32(person["id"]);
  • 在这个 try 块被命中之前,我实际上是在沿着这些行进行选择,它确实有效(这是填充 web 服务调用中的 p 对象的方式)。之后选择表明更新似乎没有发生。不,表名是正确的,但感谢您的检查!
  • Nitpick:您的 dtm 参数是否需要为字符串,而不仅仅是将值设置为 DateTime.Now?如果是这样,更容易理解为DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
  • 您可以查看 MySQL 常规查询日志以了解 mysql 认为正在发生的事情吗? dev.mysql.com/doc/refman/5.1/en/query-log.html

标签: c# mysql mono connector-net


【解决方案1】:

你能试试这个代码吗?

 try
    {
        MatchPersonResult mpr = personServ.MatchPerson(p, "MatchAndStore", null);
        using(MySqlCommand successcmd = new MySqlCommand())
        {
            successcmd.CommandText = "UPDATE myccontacts SET mcid = @mcid, matchresult = @mr, datetimematched = @dtm WHERE id = id";
            successcmd.Connection = conn;
            successcmd.Parameters.AddWithValue("@mcid",int.Parse(mpr.PersonID));
            successcmd.Parameters.AddWithValue("@mr",(int)mpr.MatchResultStatus);
            successcmd.Parameters.AddWithValue("@dtm", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
            successcmd.Parameters.AddWithValue("@id",Convert.Int32(person["id"]); 
            successcmd.Connection.Open();
            successcmd.ExecuteNonQuery();
            successcmd.Connection.Close();
            Console.WriteLine(mpr.PersonID);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2017-07-30
    • 2020-10-24
    • 2015-11-11
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多