我想制作一个简单的应用程序,可以从远程数据库中获取数据并将其显示在屏幕上,所以首先我制作了一个简单的控制台应用程序来测试连接,一切正常。这是代码:
static void Main(string[] args)
{
MySqlConnection con = new MySqlConnection("SERVER=85.10.205.173; PORT=3306; DATABASE=mybasework; UID=neawin; PWD=12345678; old guids=true; Connection Timeout=30;");
try
{
if(con.State == ConnectionState.Closed)
{
con.Open();
MySqlCommand command = new MySqlCommand("SELECT * FROM motto", con);
using (MySqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader["motto"]);
}
}
}
}
catch(MySqlException ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
con.Close();
}
}
但是当我尝试在手机上测试连接时,它显示无法连接到主机,代码如下:
using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Runtime;
using Android.Widget;
using MySql.Data.MySqlClient;
using System.Data;
namespace App1
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
private TextView Textmotto;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
Textmotto = FindViewById<TextView>(Resource.Id.textmotto);
MySqlConnection con = new MySqlConnection("SERVER=85.10.205.173; PORT=3306; DATABASE=mybasework; UID=neawin; PWD=12345678; old guids=true; Connection Timeout=30;");
try
{
if (con.State == ConnectionState.Closed)
{
con.Open();
Textmotto.Text = "Success";
}
}
catch (MySqlException ex)
{
Textmotto.Text = ex.ToString();
}
finally
{
con.Close();
}
}
}
}
我想我尝试了连接字符串的所有变体,在第一个程序中我使用了 mysql.data 库,在手机应用程序中我使用了 Xamarin.Mysql Nuget Package,如果这有什么区别的话。抱歉,英语和格式很差,这是我的第一篇文章。
最佳答案
可能是网络问题。但请不要这样做。为了直接连接到数据库,您需要在应用程序中以纯文本形式输入数据库的密码(即使您对其进行加密, key 也位于您的应用程序中)。这是完全不安全的,任何脚本小子都可以拥有您的数据库。如果您需要数据库中的数据,请编写一个 Web 服务并让该 Web 服务访问数据库,这样您就不需要让身份验证信息离开您自己的服务器。
关于c# - Xamarin、MySQL 异常 : unable to connect to any specific host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147039/