更新条目到mysql数据库

时间:2019-07-18 09:11:11

标签: c# asp.net-mvc

我是编码方面的新手,最近我被选中开始使用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();
    }

我没有收到任何错误消息,但我尝试编辑的文章从未更新

2 个答案:

答案 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);