【问题标题】:MySQL integration with C# (Windows Forms) not working? [closed]MySQL 与 C#(Windows 窗体)的集成不起作用? [关闭]
【发布时间】:2015-11-24 16:01:29
【问题描述】:

我正在使用 C# 制作一个 Windows 窗体应用程序 在 WAMP 的帮助下,我有一个正在运行的 MySQL 数据库。我在我的项目中引用了 MySQL dll。我没有收到来自控制台或代码本身的任何错误。然而,我的问题是我的 SQL 命令不起作用,我不知道为什么......

代码如下:

private void ConnectToDB(String title, String content, String price)
    {
        db_connection();
        MySqlCommand cmd = new MySqlCommand();
        cmd.CommandText = "INSERT INTO testing.customers (itemTitle, itemContent, itemPrice) VALUES('" + title + "', '" + content + "', '" + price + "');";
        cmd.Connection = connect;
        connect.Close();
    }

private void db_connection()
    {
        try
        {
            conn = "Server=localhost;Database=testinbg;Uid=TheAdmin;Pwd=dsa67as7d66asd;";
            connect = new MySqlConnection(conn);
            connect.Open();
        } catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
    }

我已授予用户“TheAdmin”所有权限?我错过了什么吗? :)

【问题讨论】:

  • 我没有看到您正在执行查询。使用 cmd.ExecuteNonQuery();

标签: c# mysql .net database winforms


【解决方案1】:

您必须执行您的查询:

  cmd.EndExecuteNonQuery();

实现

  conn = "Server=localhost;Database=testinbg;Uid=TheAdmin;Pwd=dsa67as7d66asd;";
  ...
  // Wrap IDisposable (i.e. MySqlConnection) into "using"
  using (var connect = new MySqlConnection(conn)) 
  {
    connect.Open();    
    using (MySqlCommand cmd = new MySqlCommand()) 
    {
      cmd.Connection = connect;
      cmd.CommandText = @"INSERT INTO...";    
      cmd.EndExecuteNonQuery();
    }
  }

【讨论】:

  • 可能值得添加使用参数化查询以避免 SQL 注入的建议?
【解决方案2】:

您没有执行您的查询。此外,您的查询目前容易受到 SQL 注入攻击。您应该使用参数化查询来防止上述攻击。我已经更改了您的查询,所以它是参数化的。

string sqlQuery = "INSERT INTO testing.customers (itemTitle, itemContent, itemPrice) VALUES(@title, @content, @price)";
using (var connection = new SqlConnection("connectionString"))
{
    using (var cmd = new SqlCommand(sqlQuery, connection))
    {
        cmd.Parameters.Add("@title", SqlDbType.NVarChar).Value = title;
        ...
        connection.Open();
        cmd.ExecuteNonQuery(); //You were missing this
    }
}

阅读更多关于SQL injection.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多