将c# Windows窗体应用程序连接到基于Linux的服务器上的MySQL数据库


Connect a C# Windows Form App to a MySQL Database on a Linux based server

我正在研究一个c#应用程序,该应用程序将使用位于我的网站上的远程MySQL数据库,托管在Linux服务器上。MySQL支持。

我试图使用 MySQL . data直接连接MySQL数据库。MySQLClient引用,结果,我的程序抛出以下异常:

"无法连接到任何指定的MySQL主机。"

我搜索了很多教程,但没有找到解决方案…出现相同的错误

谁能告诉我该怎么做?

请提供任何在线链接或教程或您自己的想法。

请帮帮我。

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace mysq
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {              
                string conn = "Server = myserver;database = db ;uid = username ;password = pwd ;";
                MySqlConnection con = new MySqlConnection(conn);
                con.Open();
                if (con.State == ConnectionState.Open)
                {
                    MySqlCommand cmd = new MySqlCommand("Select * from table", con);
                    DataTable dt = new DataTable();
                    MySqlDataAdapter ad = new MySqlDataAdapter(cmd);
                    ad.Fill(dt);
                    dataGridView1.DataSource = dt;
                }
           }
            catch (Exception)
            {
                throw;
            }

        }
    }
}

Thanks in advance.

我已经为我的mysql连接写了一个带有函数的类。

首先声明服务器连接:

string ServerConnection = "Server=localhost;Port=1234;Database=YourDb;Uid=user;password=pass;"

这是我如何选择数据:

public static void DB_Select(string s, params List<string>[] lists)
        {
            try
            {
                using(var conn = new MySqlConnection(ServerConnection))
                {
                    conn.Open();
                    MySqlCommand cmd = conn.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    string command = s;
                    cmd.CommandText = command;
                    using(var sqlreader = cmd.ExecuteReader())
                    while (sqlreader.Read())
                    {
                        if (sqlreader[0].ToString().Length > 0)
                        {
                            for (int i = 0; i < lists.Count(); i++)
                            {
                                lists[i].Add(sqlreader[i].ToString());
                            }
                        }
                        else
                        {
                            foreach (List<string> save in lists)
                            {
                                save.Add("/");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error while selecting data from database!'nDetails: " + ex);
            }
        }

调用

List<string> allRows = new List<string>();
DB_Select("SELECT field1 FROM table1 WHERE 1", allRows);

注意:对于您选择的每个字段,您必须传递一个自己的列表,该列表将被输出填充。


对于更新数据库,它将是完全相同的功能。你不需要对输出进行分级。可以像这样:

public static void DB_Update(string s)
        {
            try
            {
                using (var conn = new MySqlConnection(ServerConnection))
                {
                    conn.Open();
                    MySqlCommand cmd = conn.CreateCommand();
                    cmd.CommandType = CommandType.Text;
                    string command = s;
                    cmd.CommandText = command;
                    int numRowsUpdated = cmd.ExecuteNonQuery();
                    if(numRowsUpdated < 0)
                    {
                        MessageBox.Show("Warning DB-Contact: Affected_rows < 0!");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(String.Format("Updating database failed!'n'nSQL: {0}'n'nERROR: {1}",s,ex.Message));
            }
        }

您必须在程序中提供适当的连接字符串,我怀疑您正在传递您托管数据库的服务器的正确IP地址或主机名。作为第一步,尝试ping数据库服务器,以确保从您的机器可以访问它。如果可达,尝试如下操作:

MySql.Data.MySqlClient.MySqlConnection conn;
string myConnectionString;
string conn = "Server =<provide proper ip address >;database = db ;uid = username ;password = pwd ;";
conn = new MySql.Data.MySqlClient.MySqlConnection();
conn.ConnectionString = myConnectionString;
conn.Open();

更多细节在这里:http://dev.mysql.com/doc/connector-net/en/connector-net-programming-connecting-open.html