无法插入更新删除

时间:2012-07-09 07:53:02

标签: asp.net mysql

我使用Asp.net c#和MYSql作为后端。我正在更新表,但表没有更新。表中只有3列。

执行命令对象时没有异常。但是这会从cmd.ExecuteNonQuery()返回0值。

我对此进行了调试,发现cmd.Parameters已满值。如果我在mysql中手动运行更新命令,它可以正常工作。

表格如下

column -- Datatype   
ShortText -- varchar   
title -- varchar   
id -- int   

请指导我......

int retVal = 0;
        string shortText = ((TextBox)fmvwShortText.FindControl("txtShortText")).Text.Trim();
        try
        {
            int id = Convert.ToInt32(((Label)fmvwShortText.FindControl("lblShrtTextID")).Text);
            MySqlConnection con = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["conn"]);
            cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "UPDATE temp_posts SET ShortText=@shrtText WHERE id=@id AND Title=@title";
            cmd.Parameters.Add("@shrtText", MySqlDbType.VarChar).Value = shortText;
            cmd.Parameters.Add("@title", MySqlDbType.VarChar).Value =Session["EditTitle"].ToString();
            cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = id;
            con.Open();
            retVal = cmd.ExecuteNonQuery();
            con.Close();
        }
        catch (Exception e) { }
        return retVal;   

3 个答案:

答案 0 :(得分:0)

您的Title参数可能存在套管问题吗?我注意到你只是更新ID和&标题匹配完全

另外作为一般的经验法则,当使用实现IDisposable的对象时,你应该用using语句包装它们,这样可以确保你的对象始终被处理掉(即使是在误差)

using (var con = new MySqlConnection(...))
{
    using (var cmd = new MySqlCommand(...))
    {
       ....
    }
}

答案 1 :(得分:0)

首先,感谢每一位一直在寻找并尽力解决这个问题的人。

终于得到了解决方案。

在我的代码中,我在cmd.CommandText和参数中使用了 @。 但是,当我在cmd.CommandText和参数中用替换 @ 并使用 cmd.ExecuteScalar(); 时,这有效。< / p>

实际上参数名称取决于提供者。使用提供程序时 SQL Server,它应该以@开头(例如@ param1)。对于Oracle 提供者,它应该以冒号开头(...例如aram1。对于 OleDb提供者,只是一个问号(?)可以工作

谢谢大家贡献你的最好......非常感谢

但是我还有一个问题,即ExecuteScalar()正在更新数据库中的记录?我没有回答......正在寻找这个。

答案 2 :(得分:-1)

尝试这个确定代码格式化cox目前没有使用ide frmwrk

int retVal = 0;
        string shortText = ((TextBox)fmvwShortText.FindControl("txtShortText")).Text.Trim();
        try
        {
            int id = Convert.ToInt32(((Label)fmvwShortText.FindControl("lblShrtTextID")).Text);
            MySqlConnection con = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["conn"]);
            cmd = new MySqlCommand("UPDATE temp_posts SET ShortText='"+shortText+"' WHERE id='"+id+"' AND Title='"+Session["EditTitle"].ToString()+"'",con);
            con.Open();
            retVal = cmd.ExecuteNonQuery();
            con.Close();
        return retVal;              
    }
        catch (Exception e) { }