如何使用C#连接到Mysql?

我只是C#的初学者。 我正在使用XAMPP服务器用于MySQL数据库和Visual C#2010.然后我在phpMyAdmin中创建了一个名为“testdb”的数据库和一个名为“login”的表。 我在表格中输入了用户名和密码。 我正在做一个简单的WinForm登录,在那里我为用户名和密码以及一个按钮创建了两个文本框。 我完成了我的代码并且没有编译器错误。 但我在一条线上遇到了麻烦。 它说“无法连接到任何指定的MySQL主机”。 我将MySql.Data添加到我的引用中。 我想在登录时获取数据库表中的数据。然后授权用户或如果不匹配,则会提示错误消息。

这是我的代码:

using MySql.Data.MySqlClient; public bool Login(string username, string password) { MySqlConnection con = new MySqlConnection("host=localhost;username…"); MySqlCommand cmd = new MySqlCommand("SELECT * FROM login WHERE username='" + username + "' AND password='" + password + "';"); cmd.Connection = con; con.Open(); // This is the line producing the error. MySqlDataReader reader = cmd.ExecuteReader(); if (reader.Read() != false) { if (reader.IsDBNull(0) == true) { cmd.Connection.Close(); reader.Dispose(); cmd.Dispose(); return false; } else { cmd.Connection.Close(); reader.Dispose(); cmd.Dispose(); return true; } } else { return false; } } 

*我希望得到您的反馈。 🙂

您的直接问题可能是连接字符串不正确或数据库服务器不可用。 连接字符串应该是这样的

 Server=localhost;Database=testdb;Uid=;Pwd=; 

替换为您的实际值。

除此之外,你的代码有几个问题,如果这是为了成为生产代码,你肯定应该研究它们,甚至可能只是一个学习东西的玩具项目。 该列表特别有序,可能不全面。

  1. 不要对连接字符串进行硬编码。 而是将其移动到配置文件。
  2. 不要在配置文件或源代码中包含纯文本密码。 有各种解决方案,如Windows身份validation, 受 Windows Data Protection API 保护的证书或密码 。
  3. 不要只通过调用IDisposable.Dispose()处理IDisposable实例。 而是使用using语句来释放资源,即使在exception情况下也是如此。
  4. 不要使用字符串操作技术构建SQL语句。 而是使用SqlParameter来防止SQL注入攻击。
  5. 不要将纯文本密码存储在数据库中。 相反,至少存储密码的盐渍哈希并使用慢哈希函数,而不是MD5或SHA系列的成员。
  6. 您可以使用IDbCommand.ExecuteScalar来检索标量结果并避免使用数据读取器。
  7. 将布尔值与truefalse是多余的,只会给代码增加噪声。 而不是if (reader.IsDBNull(0) == true)你可以使用if (reader.IsDBNull(0))if (reader.Read() != false)等同于if (reader.Read() == true) ,因此也适用于if (reader.Read())
  8. 使用像entity framework这样的O / R映射器通常比在SQL命令级别上与数据库交互更受欢迎。

尝试相应地修改ConnectionString到标准MySQL ConnectionString:

 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; 

来源: MySQL ConnectionStrings

您还可以查看以下链接,该链接显示如何使用C#连接到MySQL数据库:

创建连接器/网络连接字符串(MYSQL)

使它简单并且sql注入免费,并且不要忘记在您的引用中添加MySql.Web因为您使用XAMPP

  public bool Login(string username, string password) { DataTable dt = new DataTable(); string config = "server=...."; using (var con = new MySqlConnection { ConnectionString = config }) { using (var command = new MySqlCommand { Connection = con }) { con.Open(); command.CommandText = @"SELECT * FROM login WHERE username=@username AND password=@password"; command.Parameters.AddWithValue("@username", username); command.Parameters.AddWithValue("@password", password); dt.Load(command.ExecuteReader()); if (dt.Rows.Count > 0) return true; else return false; } // Close and Dispose command } // Close and Dispose connection }