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