c# - 无法从 .NET 连接器连接到 Azure MySQL 数据库

标签 c# mysql azure

我尝试使用 MySQL Workbench 和 MySQL Shell 连接到 Azure MySQL 数据库,效果很好。现在我尝试使用以下 C# 代码进行连接:

var connStringBuilder = new MySqlConnectionStringBuilder
{
    Server = "creatur-db.mysql.database.azure.com",
    Database = "test",
    UserID = "creatur_db_main@creatur-db",
    Password = "{my_password}",
    SslMode = MySqlSslMode.Preferred,
};

using (MySqlConnection connection = new MySqlConnection(connStringBuilder.ToString()))
{
    connection.Open();

    connection.Close();
}

这里我用数据库密码替换了{my_password},它在 Open 方法中给了我一个异常:

MySql.Data.MySqlClient.MySqlException: 'Authentication to host 'creatur-db.mysql.database.azure.com' for user 'creatur_db_main@creatur-db' using method 'mysql_native_password' failed with message: The connection string may not be right. Please visit portal for references.

我还尝试了不同的连接字符串:

Server=creatur-db.mysql.database.azure.com; Port=3306; Database=test; Uid=creatur_db_main@creatur-db; Pwd={my_password}; SslMode=Preferred

Database=test; Data Source=creatur-db.mysql.database.azure.com; User Id=creatur_db_main@creatur-db; Password={my_password}

但是它们都不起作用。

当我在 Visual Studio 2013 中使用服务器资源管理器创建新连接时,会发生相同的异常。该错误似乎与 .NET Connector 有关。我尝试使用不同版本的 MySQL.Data.dll、.NET Framework 和 Visual Studio,但没有成功。

最佳答案

我刚刚使用我使用的 VS2017 创建了一个控制台应用程序 Nuget包MySql.Data和.Net Framework 4.6.1

它在这里完美地工作,我所做的。

创建 MySQL 服务器后,我使用 CloudShell 连接到服务器(而不是数据库)。

enter image description here

使用此代码:

mysql --host franktest.mysql.database.azure.com --user frank@franktest -p

我收到一个错误

ERROR 9000 (HY000): Client with IP address '40.76.202.47' is not allowed to connect to this MySQL server.

因此,我添加了该 IP,同时添加了我所连接的 IP。

一旦IP被保存。我执行了之前的命令,这次完美运行。我使用以下命令创建了一个名为:frankdemo 的数据库:

CREATE DATABASE frankdemo;

然后,回到 VisualStudio 中,使用从文档复制的代码作为我的 Main 方法。

static void Main(string[] args)
    {
        var builder = new MySqlConnectionStringBuilder
        {
            Server = "franktest.mysql.database.azure.com",
            Database = "frankdemo",
            UserID = "frank@franktest",
            Password = "gr3enRay14!",
            SslMode = MySqlSslMode.Required,
        };

        using (var conn = new MySqlConnection(builder.ConnectionString))
        {
            Console.WriteLine("Opening connection");
            conn.Open();

            using (var command = conn.CreateCommand())
            {
                command.CommandText = "DROP TABLE IF EXISTS inventory;";
                command.ExecuteNonQuery();
                Console.WriteLine("Finished dropping table (if existed)");

                command.CommandText = "CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);";
                command.ExecuteNonQuery();
                Console.WriteLine("Finished creating table");

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

                int rowCount = command.ExecuteNonQuery();
                Console.WriteLine(String.Format("Number of rows inserted={0}", rowCount));
            }

            // connection will be closed by the 'using' block
            Console.WriteLine("Closing connection");
        }

        Console.WriteLine("Press RETURN to exit");
        Console.ReadLine();
    }

运行了一下,效果很好

enter image description here

我引用的文档是:

关于c# - 无法从 .NET 连接器连接到 Azure MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591803/

相关文章:

mysql - 我想根据 where 子句在不同列上显示一列数据总和

azure - 将 Azure Data Lake Storage 挂载到 Windows VM 文件系统

c# - 如何在图片框控件中突出显示图像的特定部分

c# - WinForms DataGridView 不滚动但开始另一列

c# - 从 javascript 调用方法后面的代码?

c# - 使用 MySQL 数据读取器

mysql - 如何在子查询 WHERE 子句中重用变量?

mysql - JDBC 连接- Class.forName 与 Class.forName().newInstance?

python - 函数未显示在 Azure Function App 中

powershell - Azure 应用服务扩展 powershell