我想做一个简单的应用程序,将数据从远程数据库,并显示在屏幕上,所以首先我做了一个简单的控制台应用程序来测试连接和它的所有工作。代码如下:
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();
}
}
}
}
我想我尝试了connectionstring的所有变体,在第一个程序中我使用了mysql.datalibrary,在手机应用程序中我使用了xamarin.mysql nuget包,如果这有什么不同的话。对不起,英文和格式不好,我的第一篇文章。
2条答案
按热度按时间iyr7buue1#
谢谢你的帮助,我解决了这个问题,在我的名单中添加了互联网许可的建议弗拉迪斯拉夫。
mgdq6dx12#
可能是网络问题。但请不要这样做。为了直接连接到数据库,您需要在应用程序中以明文形式将密码输入数据库(即使您对其加密,密钥也在应用程序中)。这是完全不安全的,任何脚本小子都可以拥有你的数据库。如果您需要数据库中的数据,请编写一个webservice并让webservice访问db,这样您就不需要让身份验证信息离开您自己的服务器。