我是编码方面的新手,最近我被选中开始使用C#和Asp.Net进行培训。我正在尝试更新数据库中的条目,但无济于事。删除,创建和读取功能正常工作。 (我知道我的代码缺乏尝试性)
我尝试了在谷歌搜索时发现的不同解决方案,但是由于我仍在训练中,所以我从不完全了解我所遵循的内容是否完全正确。 当前,当我导航到我要编辑的“文章”时,我可以用其信息显示字段,但是当我单击“保存”按钮时,什么都没有发生。
这是在我的文章上下文文件中:
public Article EditSingleArticle(int id, int userID, string Title, string Body)
{
Article article = new Article();
using (MySqlConnection conn = GetConnection())
{
MySqlCommand cmdslct = new MySqlCommand("SELECT * FROM Article WHERE ID=@id", conn);
MySqlCommand cmdul = new MySqlCommand("UPDATE Article SET userID=@userID,Title=@Title,Body=@Body WHERE ID=@id", conn);
conn.Open();
cmdslct.Parameters.AddWithValue("@ID", id);
cmdslct.ExecuteNonQuery();
cmdul.Parameters.AddWithValue("@userID", article.userID);
cmdul.Parameters.AddWithValue("@Title", article.Title);
cmdul.Parameters.AddWithValue("@Body", article.Body);
cmdul.ExecuteNonQuery();
using (MySqlDataReader reader = cmdslct.ExecuteReader())
{
while (reader.Read())
{
article = new Article()
{
userID = reader.GetInt32("userID"),
ID = reader.GetInt32("ID"),
Title = reader.GetString("Title"),
Body = reader.GetString("Body")
};
}
}
conn.Close();
}
下面的代码在我的ArticleController文件中:
public IActionResult Edit(int id, int userID, string Title, string Body)
{
ArticleContext context = HttpContext.RequestServices.GetService(typeof(ArticleContext)) as ArticleContext;
if (ModelState.IsValid)
{
return View(context.EditSingleArticle(id, userID, Title, Body));
}
return View();
}
我没有收到任何错误消息,但我尝试编辑的文章从未更新
答案 0 :(得分:1)
问题是文章对象仅具有默认的空字段,因为您正在调用cmdslct。ExecuteNonQuery(),而该cmdslct根本不返回数据,仅返回受插入,更新或删除影响的行数。 / p>
因此,您应该调用ExecuteReader()来返回一个对象,该对象可以遍历整个结果集,而一次只在内存中保留一条记录。
您的代码应类似于以下代码,以便按预期工作:
Article article = new Article();
using (MySqlConnection conn = GetConnection())
{
MySqlCommand cmdslct = new MySqlCommand("SELECT * FROM Article WHERE ID=@id", conn);
MySqlCommand cmdul = new MySqlCommand("UPDATE Article SET userID=@userID,Title=@Title,Body=@Body WHERE ID=@id", conn);
conn.Open();
cmdslct.Parameters.AddWithValue("@ID", id);
using (MySqlDataReader reader = cmdslct.ExecuteReader())
{
while (reader.Read())
{
article = new Article()
{
userID = reader.GetInt32("userID"),
ID = reader.GetInt32("ID"),
Title = reader.GetString("Title"),
Body = reader.GetString("Body")
};
}
}
cmdul.Parameters.AddWithValue("@userID", article.userID);
cmdul.Parameters.AddWithValue("@Title", article.Title);
cmdul.Parameters.AddWithValue("@Body", article.Body);
cmdul.ExecuteNonQuery();
conn.Close();
}
此致
答案 1 :(得分:0)
在更新查询中,您使用的是使用条件@id的条件。但是您没有将ID参数传递给查询。为更新查询添加参数“ @id”。 将此行添加到代码中
cmul.Parameters.AddWithValue("@id", id);