我只是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;
}
}*我希望您的反馈。:)
发布于 2013-02-11 11:19:07
直接的问题可能是连接字符串不正确,或者数据库服务器不可用。连接字符串应如下所示
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;将<username>和<password>替换为您的实际值。
此外,您的代码有几个问题,如果这是为了成为产品代码,那么您绝对应该研究它们,即使这只是一个玩具项目,以了解一些东西。该列表按特定顺序排列,可能并不全面。
IDisposable.Dispose()来处理IDisposable实例。Instead use the using statement to release resources even in the case of exceptions.SqlParameter to prevent SQL injection attacks.IDbCommand.ExecuteScalar来检索标量结果,并避免将数据与true或false一起使用布尔值是多余的,并且只会给您的代码增加噪声。您可以只使用if (reader.IsDBNull(0))而不是if (reader.IsDBNull(0) == true)。同样的道理也适用于if (reader.Read() != false),它等同于if (reader.Read() == true),因此,与在SQL命令级别上与数据库交互相比,通常首选Entity Framework这样的O/R映射器。发布于 2013-02-11 04:22:22
尝试根据标准MySQL ConnectionString修改您的ConnectionString:
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;您还可以查看以下链接,该链接显示了如何使用C#连接到MySQL数据库:
发布于 2017-08-30 09:00:09
让它变得简单并且不需要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
}https://stackoverflow.com/questions/14801948
复制相似问题