首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用C#连接Mysql?

问如何使用C#连接Mysql?
EN

Stack Overflow用户
提问于 2013-02-11 03:55:13
回答 3查看 24.6K关注 0票数 3

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

下面是我的代码:

代码语言:javascript
复制
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;
    }    
}

*我希望您的反馈。:)

EN

回答 3

Stack Overflow用户

发布于 2013-02-11 11:19:07

直接的问题可能是连接字符串不正确,或者数据库服务器不可用。连接字符串应如下所示

代码语言:javascript
复制
Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;

将<username>和<password>替换为您的实际值。

此外,您的代码有几个问题,如果这是为了成为产品代码,那么您绝对应该研究它们,即使这只是一个玩具项目,以了解一些东西。该列表按特定顺序排列,可能并不全面。

  1. 不要对连接字符串进行硬编码。Instead move it to a configuration file.
  2. Do不在配置文件或源代码中包含纯文本密码。有各种不同的解决方案,如Windows Data Protection API.
  3. Do的windows authentication, certificates或passwords protected,而不仅仅是通过调用IDisposable.Dispose()来处理IDisposable实例。Instead use the using statement to release resources even in the case of exceptions.
  4. Do不使用字符串操作技术构建SQL语句。Instead use SqlParameter to prevent SQL injection attacks.
  5. Do不在数据库中存储纯文本密码。Instead at least store salted hashes of the passwords and use a slow hash function, not MD5 or a member of the SHA family.
  6. You可以使用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映射器。
票数 17
EN

Stack Overflow用户

发布于 2013-02-11 04:22:22

尝试根据标准MySQL ConnectionString修改您的ConnectionString:

代码语言:javascript
复制
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

来源:MySQL ConnectionStrings

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

Creating a Connector/Net Connection String (MYSQL)

票数 2
EN

Stack Overflow用户

发布于 2017-08-30 09:00:09

让它变得简单并且不需要sql注入,而且不要忘记在引用中添加MySql.Web,因为您使用的是XAMPP

代码语言:javascript
复制
        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
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14801948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档