【问题标题】:Updating Database Command in C#在 C# 中更新数据库命令
【发布时间】:2013-07-01 13:08:21
【问题描述】:
        using (MySqlCommand bb = new MySqlCommand("UPDATE  members SET  Begin = 1 WHERE id ='" + uid + "';"))
        {
            bb.Connection = con;
            con.Open();
            using (MySqlCommand fff = new MySqlCommand("UPDATE  members SET  b = 1 WHERE id ='" + uid + "';"))
            {
                fff.Connection = con;
            }
            this.Hide();
            Main main = new Main();
            main.Show();
        }

我正在尝试将两个表 B 和 Begin to 1 更​​新为当前登录的用户(我的 uid 命令:

  using (MySqlCommand id = new MySqlCommand("SELECT id FROM members WHERE username='" + textBox1.Text + "';"))
                            {
                                id.Connection = con;
                                MySqlDataReader read3 = cmd.ExecuteReader();
                                read3.Dispose();
                                int idd = (int)id.ExecuteScalar();
                                uid = idd;
                                Begin.uid = idd;
                                MySqlDataReader read4 = id.ExecuteReader();
                                read4.Dispose();
                                id.Dispose();
                            }

我不知道为什么,但它没有更新数据库。

【问题讨论】:

  • 你永远不会执行更新命令。
  • 正如@GrantThomas 所说的那样,这个命令容易受到“SQL 注入”的攻击。更好的是,它是 2013 年,停止使用直接 SQL!使用实体框架,所有这些问题都会消失......
  • 不仅如此,您还需要使用参数化更新。

标签: c# mysql .net sql database


【解决方案1】:

你没有执行命令。

你需要fff.ExecuteScalar(); 还有bb.ExecuteScalar();

ExecuteNonQuery();

您也容易受到SQL Injection 的攻击,请尝试使用paramerterized queries

例如:

 bb.CommandText = "UPDATE members SET  Begin = 1 WHERE id = @id";  
 bb.Parameters.AddWithValue("@id", id);
 bb.ExecuteNonQuery();

【讨论】:

  • 谢谢!我怎样才能使 SQL inj 不受攻击?:) idk 什么是参数化查询.. xD
  • @VlasiuRobert - 更新了答案以向您展示如何做到这一点。
【解决方案2】:

首先是用户参数化查询,其次是在任何SqlCommands 上调用ExecuteNonQuery()

using (MySqlCommand bb = new MySqlCommand("UPDATE  members SET  Begin = 1 WHERE id = @id;"))
{
    bb.Parameters.AddWithValue("@id", uid);
    bb.Connection = con;
    con.Open();

    bb.ExecuteNonQuery();

    using (MySqlCommand fff = new MySqlCommand("UPDATE  members SET  b = 1 WHERE id = @id;"))
    {
        fff.Parameters.AddWithValue("@id", uid);
        fff.Connection = con;

        fff.ExecuteNonQuery();
    }

    this.Hide();
    Main main = new Main();
    main.Show();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多