【问题标题】:Execute MySql query from asp.net从 asp.net 执行 MySql 查询
【发布时间】:2011-02-23 01:49:07
【问题描述】:

为什么这个命令不能正常执行:

    using (MySqlCommand myCommand = new MySqlCommand("Update jobs SET poster_email = '@1', url = '@2' WHERE company = '@3'; ", myConn))
    {
        myCommand.Parameters.AddWithValue("@1", email);
        myCommand.Parameters.AddWithValue("@2", url);
        myCommand.Parameters.AddWithValue("@3", company);
        myConn.Open();
        myCommand.ExecuteNonQuery();
    }

但是当我用实际值替换 @3 时,它会起作用:

using (MySqlCommand myCommand = new MySqlCommand("Update jobs SET poster_email = '@1', url = '@2' WHERE company = 'MyCompany'; ", myConn))
{
    myCommand.Parameters.AddWithValue("@1", email);
    myCommand.Parameters.AddWithValue("@2", url);

    myConn.Open();
    myCommand.ExecuteNonQuery();
}

为公司变量传入的值与第二个示例中硬编码的值相同。我已经逐步使用调试器,以确保将公司变量作为参数添加,并且它是我期望的值。 IE。没有空格和 trim()

知道我做错了什么吗?

更新:

这也可行,但我不得不担心 Sql Injection...

    string myQuery = string.Format("Update jobs SET poster_email = '{0}', url = '{1}' WHERE company = '{2}'; ", email, url, company);

    using (MySqlCommand myCommand = new MySqlCommand(myQuery, myConn))
    {
        myConn.Open();
        myCommand.ExecuteNonQuery();
    }

【问题讨论】:

    标签: asp.net mysql


    【解决方案1】:

    我相信对于 MySQL 命令,您想使用“?”而不是“@”:

    using (MySqlCommand myCommand = new MySqlCommand("Update jobs SET poster_email = '?1', url = '?2' WHERE company = '?3'; ", myConn))
    {
        myCommand.Parameters.AddWithValue("?1", email);
        myCommand.Parameters.AddWithValue("?2", url);
        myCommand.Parameters.AddWithValue("?3", company);
        myConn.Open();
        myCommand.ExecuteNonQuery();
    }
    

    http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html#connector-net-examples-mysqlcommand-parameters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 2013-06-30
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多