0

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

执行命令对象时也不例外。但这会返回 0 值cmd.ExecuteNonQuery()

我对此进行了调试,发现 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;   
4

3 回答 3

0

Title您的参数可能是外壳问题吗?我注意到您只有在 ID 和标题完全匹配时才更新?

同样作为一般经验法则,在使用实现的对象时,IDisposable您应该用using语句包装它们,这将确保您的对象始终被释放(即使是错误的结果)

using (var con = new MySqlConnection(...))
{
    using (var cmd = new MySqlCommand(...))
    {
       ....
    }
}
于 2012-07-09T07:59:08.757 回答
0

首先感谢每一位一直在寻找并尽力与我一起解决这个问题的人..

终于得到了解决方案。

在我的代码中,我在 cmd.CommandText 和参数中使用了 @。 但是当我用?替换这个@时 在 cmd.CommandText 和参数中都使用了cmd.ExecuteScalar(); 这行得通。

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

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

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

于 2012-07-09T11:39:12.300 回答
-1

试试这个 nt 确定代码格式化因为目前没有使用 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) { }
于 2012-07-09T08:10:47.493 回答