6 votes

Comment connecter correctement la base de données MySQL avec une application C# ?

Je suis en train d'essayer de connecter ma base de données MySQL avec C# mais la connexion n'est pas établie.

Je suis en train d'utiliser

static string connstring = @"server=my.live.ip;userid=user;password=123;database=db_name;port=3306";

mais je reçois toujours

L'authentification à l'hôte 'my.live.ip' pour l'utilisateur 'user' en utilisant la méthode 'mysql_native_password' a échoué avec le message : Accès refusé pour l'utilisateur 'user'@'202.xxx.xxx.xxx' (utilisant le mot de passe : NON)`

J'ai cherché mais n'ai trouvé aucune solution adaptée(s).

P.S: L'IP en direct que j'utilise est celle d'Azure. c'est-à-dire que la base de données MySQL est hébergée sur le serveur Azure via xampp

Toute aide serait grandement appréciée

1voto

Rick James Points 15994

(en utilisant le mot de passe : NO) signifie qu'aucun mot de passe n'a été fourni. Je ne suis pas familier avec la syntaxe de connexion pour C#, mais je soupçonne qu'il y a un problème avec

static string connstring =
     @"server=my.live.ip;userid=user;password=123;database=db_name;port=3306";

Ou peut-être que connstring n'est pas utilisé.

Vérifiez également du côté de MySQL. Faites un SHOW GRANTS FOR 'user'@'202%' ou peut-être un SHOW GRANTS FOR 'user'@'202.xxx.xxx.xxx', en fonction que vous avez utilisé '202%' ou '202.xxx.xxx.xxx' comme "hôte".

Vous devriez obtenir quelque chose comme

GRANT ... ON dbname.* TO 'user'@'202%' WITH AUTHENTICATION 'mysql_native_password';

Remarque : avoir un nom d'hôte par rapport à une adresse IP peut poser problème.

1voto

Thimmu Lanka Points 412

Quelques choses possibles à essayer -

  1. Assurez-vous que le nom de votre serveur dans la chaîne de connexion correspond à ce qui est configuré sur le portail Azure.
  2. Il semble que le nom d'utilisateur et le mot de passe que vous avez mentionnés sont fictifs (ce qui est compréhensible). Vérifiez si votre nom d'utilisateur réel ou votre mot de passe contiennent des caractères spéciaux, vous devrez les encoder correctement pour les échapper.

Par exemple, si votre mot de passe est my>Pass, la chaîne de connexion devrait ressembler à ceci. static string connstring = @"server=servername;userid=user;password=my>Pass;database=db_name;port=3306";

Voici une liste complète si vous souhaitez explorer davantage.

0voto

Yashraj Jain Points 38
utilisation de System;
utilisation de System.Threading.Tasks;
utilisation de MySql.Data.MySqlClient;
espace de noms AzureMySqlExample
{
classe MySqlCreate
{
    static async Task Main(string[] args)
    {
        var builder = new MySqlConnectionStringBuilder
        {
            Server = "VOTRE-SERVEUR.mysql.database.azure.com",
            Database = "VOTRE-BASE DE DONNÉES",
            UserID = "UTILISATEUR@VOTRE-SERVEUR",
            Password = "MOT DE PASSE",
            SslMode = MySqlSslMode.Required,
        };

        en utilisant (var conn = new MySqlConnection(builder.ConnectionString))
        {
            Console.WriteLine("Ouverture de la connexion");
            en attente conn.OpenAsync();

            en utilisant (var commande = conn.CreateCommand())
            {
                commande.CommandText = "DROP TABLE IF EXISTS inventory;";
                en attente commande.ExecuteNonQueryAsync();
                Console.WriteLine("Table supprimée (si elle existait)");

                commande.CommandText = "CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);";
                en attente commande.ExecuteNonQueryAsync();
                Console.WriteLine("Table créée");

                commande.CommandText = @"INSERT INTO inventory (name, quantity) VALUES (@name1, @quantity1),
                    (@name2, @quantity2), (@name3, @quantity3);";
                commande.Parameters.AddWithValue("@name1", "banane");
                commande.Parameters.AddWithValue("@quantity1", 150);
                commande.Parameters.AddWithValue("@name2", "orange");
                commande.Parameters.AddWithValue("@quantity2", 154);
                commande.Parameters.AddWithValue("@name3", "pomme");
                commande.Parameters.AddWithValue("@quantity3", 100);

                int rowCount = en attente commande.ExecuteNonQueryAsync();
                Console.WriteLine(String.Format("Nombre de lignes insérées={0}", rowCount));
            }

            // la connexion sera fermée par le bloc 'en utilisant'
            Console.WriteLine("Fermeture de la connexion");
        }

        Console.WriteLine("Appuyez sur RETURN pour quitter");
        Console.ReadLine();
    }
}

}

0voto

lucaslah Points 23

Vous pouvez simplement le rechercher, mais voici quand même le code que j'ai trouvé :

Remplacez tous les numéros de port, noms d'utilisateur et mots de passe de la base de données ainsi que l'adresse IP du serveur par ce dont vous avez besoin.

Code :

using System;
using System.Windows;
using MySql.Data.MySqlClient;

namespace Deportes_WPF
{

public partial class Login : Window
{
private MySqlConnection connection;
private string server;
private string database;
private string user;
private string password;
private string port;
private string connectionString;
private string sslM;

public Login()
{
    InitializeComponent();

    server = "nom_du_serveur";
    database = "nom_de_la_base_de_données";
    user = "identifiant";
    password = "mot_de_passe";
    port = "3306";
    sslM = "none";

    connectionString = String.Format("server={0};port={1};user id={2}; password={3}; database={4}; SslMode={5}", server, port, user, password, database, sslM);

    connection = new MySqlConnection(connectionString);
}

private void conexion()
{
    try
    {
        connection.Open();

        MessageBox.Show("connexion réussie");

        connection.Close();
    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.Message + connectionString);
    }
}

private void btn1_Click(object sender, RoutedEventArgs e)
{
    conexion();
}
}

}

J'espère que ce code fonctionnera pour vous.

Il semble aussi que pour l'erreur que vous m'avez donnée, le nom d'utilisateur ou le mot de passe est invalide.

0voto

Murat Yıldız Points 1829

Essayer ceci :

const string connStr = "Server=my.live.ip; User=user; Database=db_name; Password=123; port=3306; 
    Allow Zero Datetime=true; Convert Zero Datetime=true;"; 

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X