我使用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;
答案 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) { }