C# Winforms 连接到 MySQL AWS 数据库

Posted

技术标签:

【中文标题】C# Winforms 连接到 MySQL AWS 数据库【英文标题】:C# Winforms connection to MySQL AWS Database 【发布时间】:2019-12-09 14:59:48 【问题描述】:

我正在尝试将一个 winforms .net 应用程序与一个 AWS RDS mysql 数据库连接,但我在建立连接时遇到了困难。我已经阅读了很多关于通过 Microsoft SQL 数据库和 Elastic Beanstalk 进行连接的材料,但我没有找到我正在寻找的答案......可能是因为我是一个菜鸟。

我浏览了以下几个问题: How to connect to MySQL Database? https://dev.mysql.com/doc/dev/connector-net/8.0/html/T_MySql_Data_MySqlClient_MySqlConnection.htm

using MySql.Data.MySqlClient;

string connection = "server=localhost; Database=database_URL; User Id=admin; 
Password=myPassword";
myConn.Open();
MessageBox.Show("Success");

我收到以下错误消息:

MySql.Data.MySqlClient.MySqlException: '无法连接到任何指定的 MySQL 主机。'

我缺少什么简单的东西吗?我已将数据库端点复制到 database_URL 位置。我的用户名和密码正确。我的数据库在 AWS 上设置为 MySQL 数据库。

【问题讨论】:

你可以使用终端/命令行登录 MySQL 吗? 通常您需要创建防火墙规则以允许访问云数据库服务器(出于安全原因)。 “当您首次创建数据库实例时,其防火墙会阻止任何数据库访问,除非通过关联安全组指定的规则。” docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 您应该考虑将 MySQL 实例打开到 Internet 的负面影响。任何在您的应用程序中搜索可读字符串的人都会找到您的 MySQL 服务器的 IP 地址、管理员用户名和密码,从而获得完全访问权限。 除非您直接在还包含 MySQL 服务器的 EC2 实例上运行/开发此 winforms 应用程序,否则将 localhost 作为服务器名称是行不通的。确保您的 MySQL 数据库使用的端口对世界开放(坏主意),然后将您的数据库服务器的公共互联网 IP 地址放入您的连接字符串中,而不是 localhost。 - 然后阅读为什么这是一个坏主意并改变周围的东西,以便您的应用程序使用 Web 服务或类似服务,并且该 Web 服务与 mysql 有一个私有的可信连接 【参考方案1】:

由于无法连接到主机而给出错误消息。

在您的连接字符串中,将 localhost 作为服务器,但您的数据库位于云 (AWS) 上,因此这意味着您必须指定数据库的 IP 或指向该数据库的域名,而不是本地(本地意味着在您的计算机中)。例如

string conn = "server=192.168.0.7; Database=database_name; User Id=admin; Password=myPassword";

请注意,服务器 IP 由 AWS 提供,您需要确保端口已启用。 MySQL 最常用的端口是 3306。

最好的问候。

【讨论】:

我不确定它是否有帮助,提供一个使用 192.168.xx 本地 lan 地址的示例给未能掌握 localhost 不是其基于云的面向公众的 IP 的概念的人数据库服务器..【参考方案2】:

试试这个,

   //This is my connection string i have assigned the database file address path  
   string MyConnection2 = 
   "host='localhost';database='databasename';username='myusername';password='mypassword'";
   //This is my insert query in which i am taking input from the user through windows forms  
   string Query = "Your query";
   //This is  MySqlConnection here i have created the object and pass my connection string.  
   MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
   //This is command class which will handle the query and connection object.  
   MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2);
   MySqlDataReader MyReader2;
   MyConn2.Open();
   MyReader2 = MyCommand2.ExecuteReader();     
   // Here our query will be executed and data saved into the database.  
   MessageBox.Show("Save Data");
   while (MyReader2.Read())
   
   
   MyConn2.Close();

【讨论】:

【参考方案3】:

使用ConnectionStrings 进行检查会使您的参数名称看起来好像是错误的。 “用户名”应为“uid”,“密码”应为“pw”。

无论如何,我建议使用MySqlConnectionStringBuilder-class 来构造您的连接字符串。

var connectionStringBuilder = new MySqlConnectionStringBuilder

    Server = "<Instance_Ip>",
    UserID = "root",
    Password = "<Password>",
    Database = "<Database_Name>"
;

using (var conn = new MySqlConnection(connectionStringBuilder.ToString()))

【讨论】:

以上是关于C# Winforms 连接到 MySQL AWS 数据库的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 客户端通过 AWS 堡垒主机连接到 MySQL RDS 实例

MySQL Workbench 连接到 AWS,收到错误“无法连接到本地主机”

使用 DataGrip 连接到 AWS MySQL 时遇到问题

无法从 AWS Lambda 连接到 AWS RDS MySql DB。 ClassNotFoundException:com.mysql.jdbc

无法将R连接到AWS中的Bitnami服务器中托管的mysql

将 Rails 连接到 AWS MySQL 数据库