【问题标题】:Xamarin, MySQL exception: unable to connect to any specific hostXamarin,MySQL 异常:无法连接到任何特定主机
【发布时间】:2019-04-08 09:05:07
【问题描述】:

我想制作一个简单的应用程序,从远程数据库中获取数据并将其显示在屏幕上,所以首先我制作了一个简单的控制台应用程序来测试连接,一切正常。这是代码:

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,如果这有什么不同的话。抱歉英文和格式不好,我的第一篇文章。

【问题讨论】:

  • 您确定移动设备可以连接到该 IP 吗?防火墙是否阻塞了端口?
  • 您是否在清单中声明了互联网权限?
  • 对不起,之前没看到,但我自己弄明白了,谢谢你的帮助

标签: c# android mysql xamarin exception


【解决方案1】:

可能是网络问题。但是请不要这样做。为了直接连接到数据库,您需要在您的应用程序中以纯文本形式输入您的数据库密码(即使您对其进行加密,密钥也在您的应用程序中)。这是完全不安全的,任何脚本小子都可以拥有您的数据库。如果您需要来自数据库的数据,请编写一个 Web 服务并让该 Web 服务访问数据库,这样您就不需要让身份验证信息离开您自己的服务器。

【讨论】:

    【解决方案2】:

    感谢您的帮助,我按照 Vladyslav 的建议通过在清单中添加 INTERNET 权限解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2011-06-07
      • 2013-08-02
      • 2017-02-26
      • 1970-01-01
      相关资源
      最近更新 更多