【问题标题】:Using the using() to implement Mysql connection使用using()实现Mysql连接
【发布时间】:2020-09-03 06:44:53
【问题描述】:

Follow up question

我在下面代码中使用 using 语句的方式正确吗?

else if(updated_password == confirm_password)
{
   using (old_connection = new MySqlConnection("server=localhost;user id=" + old_user + ";database=DB;password=" + old_pass))
   {
       MySqlCommand old_cmd = new MySqlCommand("ALTER USER'" + old_user + "'@'localhost' IDENTIFIED BY'" + confirm_password + "'", old_connection);

       old_cmd.ExecuteNonQuery();
       //old_connection.Close();
       MessageBox.Show("Password changed successfully.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
       //old_connection.Open();
    }
}

【问题讨论】:

    标签: c# mysql database


    【解决方案1】:

    您几乎正确地使用了“使用”,但代码存在一些小问题。

    理想情况下,您可以每次都创建一个新连接,而不是每次都使用相同的变量。这将有助于解决范围问题,并且不太可能犯错误,例如使用它的旧实例。喜欢:

     using (var connection = new MySqlConnection("server=localhost;user id=" + old_user + ";database=DB;password=" + old_pass))
    

    连接仍然需要在 'using' 语句中打开。 “使用”仅句柄是对象的处置。所以“使用”中的第一行应该是:

    connection.Open();
    

    创建“MySqlCommand”时还应使用参数以防止 SQL 注入攻击。

    【讨论】:

    • "创建 'MySqlCommand' 时还应使用参数以防止 SQL 注入攻击。"所以基本上 MySqlCommand(query,old_connection) where query is ""ALTER USER'" + old_user + "'@'localhost' IDENTIFIED BY'" + confirm_password + "'""
    • 我声明了 MySqlConnection old_connection;在代码的开头。所以你说我应该删除声明,每次我想连接到数据库时只使用 var old_connection ?并且通过使用 using() 语句,是否需要说 old_connection.Open(),即被注释掉的部分?
    • 是的,您应该每次都创建一个新的连接对象并调用 connection.Open()。使用将关闭连接,因此如果有连接,那么您将永远不会再次打开它。明智的参数在这里的最佳答案很好地解释了它:stackoverflow.com/questions/13580993/…
    • 我还是有点迷茫。所以你说如果我想建立另一个连接,我不应该使用 var connection(或 var old_connection),而是使用另一个像 var conn(...) 并立即使用 conn.Open()?
    • 这不是必需的,因为应用程序仍然可以工作,但可能是一个安全漏洞。我想说把它放在另一个问题中,因为它与“使用”语句并不真正相关
    【解决方案2】:
    using(var old_connection = ...)
    

    会更好。不需要在using语句范围之外保存连接

    【讨论】:

    • 我声明了 MySqlConnection old_connection;在代码的开头。所以你说我应该删除声明,每次我想连接到数据库时只使用 var old_connection ?并且通过使用 using() 语句,是否需要说 old_connection.Open(),即被注释掉的部分?
    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多