How to connect to Mysql using C#?

Refresh

December 2018

Views

24.4k time

4

I'm just a beginner in C#. I'm using XAMPP server for MySQL database and Visual C# 2010. Then I have created a database named "testdb" in phpMyAdmin and a table named "login". I have inserted my username and password in the table. I'm doing a simple WinForm login where I made two text boxes for username and password and a button. I have my codes done and there's no compiler error. But I had troubled in one line. It says "Unable to connect to any of the specified MySQL hosts". I added MySql.Data to my references. I want to fetch the data in the database table when I'm going to log in. Then authorize the user or if not matched, it will prompt an error message.

Here is my code:

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;
    }    
}

*I hope for your your feedback. :)

3 answers

2

Попробуйте изменить ваш ConnectionString соответственно к стандартному MySQL ConnectionString:

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

Источник: MySQL ConnectionStrings

Вы также можете посмотреть по следующей ссылке, которая показывает, как подключиться к базе данных MySQL, используя C #:

Создание соединителя / Net Connection String (MYSQL)

0

Сделать это просто и 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 [email protected] AND [email protected]";
                    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
        }
17

Ваша непосредственная проблема, вероятно, либо неправильная строка подключения или сервер базы данных не доступна. Строка соединения должна быть что-то вроде этого

Server=localhost;Database=testdb;Uid=<username>;Pwd=<password>;

с <username>и <password>заменить с фактическими значениями.

Кроме того, что ваш код имеет несколько вопросов, и вы обязательно должны заглянуть в них, если это призвано стать кодом производства и, возможно, даже если это просто игрушка проект, чтобы узнать что-то. Список находится в определенном порядке и не может быть исчерпывающим.

  1. Не трудно кодировать строку подключения. Вместо того, чтобы переместить его в файл конфигурации.
  2. Не включать обычные текстовые пароли в файлах конфигурации или исходного кода. Существуют различные решения , такие как проверка подлинности Windows, сертификаты или пароли , защищенные с помощью API защиты данных для Windows .
  3. Не просто выбрасывайте IDisposableэкземпляры по телефону IDisposable.Dispose(). Вместо того, чтобы использовать usingзаявление , чтобы освободить ресурсы даже в случае исключения.
  4. Не стройте операторы , используя методы работы со строками. Вместо того, чтобы использовать SqlParameterдля предотвращения атак SQL - инъекции.
  5. Не храните незашифрованные пароли в базе данных. Вместо этого , по крайней мере хранить соленые хэши паролей и использовать медленную хэш - функцию, а не MD5 или члена семьи SHA.
  6. Вы можете использовать IDbCommand.ExecuteScalarдля получения скалярного результата и избежать использования чтения данных.
  7. Сравнивая логическое значение с trueили falseизбыточно и только добавляет шум в код. Вместо того , if (reader.IsDBNull(0) == true)вы можете просто использовать if (reader.IsDBNull(0)). То же самое справедливо и для того, if (reader.Read() != false)что эквивалентно if (reader.Read() == true)и , следовательно , также if (reader.Read()).
  8. Использование O / R Mapper подобно Entity Framework , как правило , предпочтительнее взаимодействия с базой данных на уровне команд SQL.