如何使用C#连接到Mysql
本文关键字:Mysql 连接 何使用 | 更新日期: 2023-09-27 17:58:39
我只是C#的初学者。我使用的是用于MySQL数据库和Visual C#2010的XAMPP服务器。然后,我在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=<username>;Pwd=<password>;
其中CCD_ 1和CCD_。
此外,你的代码有几个问题,如果这是为了成为生产代码,即使这只是一个学习东西的玩具项目,你也应该研究一下。这份清单的顺序很特殊,可能并不全面。
- 不要对连接字符串进行硬编码。而是将其移动到配置文件中
- 不要在配置文件或源代码中包含纯文本密码。有各种解决方案,如windows数据保护API保护的windows身份验证、证书或密码
- 不要只通过调用
IDisposable.Dispose()
来处理IDisposable
实例。相反,即使在出现异常的情况下,也可以使用using
语句来释放资源 - 不要使用字符串操作技术构建SQL语句。相反,使用
SqlParameter
来防止SQL注入攻击 - 不要将纯文本密码存储在数据库中。相反,至少要存储有盐的密码散列,并使用慢散列函数,而不是MD5或SHA家族的成员
- 您可以使用
IDbCommand.ExecuteScalar
来检索标量结果,并避免使用数据读取器 - 将布尔值与
true
或false
进行比较是多余的,只会给代码增加噪声。您可以直接使用<username>
1来代替if (reader.IsDBNull(0) == true)
。这同样适用于if (reader.Read() != false)
,其等效于if (reader.Read() == true)
,因此也适用于if (reader.Read())
- 与SQL命令级别的数据库交互相比,通常更喜欢使用像实体框架这样的O/R映射器
尝试根据标准MySQL ConnectionString:修改ConnectionString
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
来源:MySQL连接字符串
您还可以查看以下链接,该链接显示了如何使用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
}