无法连接到远程主机

时间:2018-05-13 12:00:50

标签: c# mysql database

连接到远程主机时遇到问题。我可以使用数据库的副本连接到本地服务器。

我正在尝试连接到我的网络主机上的XenForo数据库并获取一些信息。所有人都在使用localhost。

private static MySqlConnection _connection = 
    new MySqlConnection("Server=ip; database=ls-v_forum; UID=ls-v_forum; password=pass");

public static int? FetchUserId(string emailoruser)
{
    MySqlCommand userCommand = new MySqlCommand("SELECT * FROM xf_user WHERE username='" + emailoruser + "'", _connection);
    MySqlCommand emailCommand = new MySqlCommand("SELECT * FROM xf_user WHERE email='" + emailoruser + "'", _connection);

    _connection.OpenAsync();
}

这就是代码而且它正在抛出这个错误

  

连接必须有效且开放。   at MySql.Data.MySqlClient.ExceptionInterceptor.Throw(异常异常)   at MySql.Data.MySqlClient.MySqlCommand.CheckState()   at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior)   行为)

修改

public int? FetchUserId(string emailoruser)
    {
        using (var _connection = new MySqlConnection("server=ip; database=ls-v_forum; UID=ls-v_forum; password=pass"))
        {
            MySqlCommand userCommand = new MySqlCommand("SELECT * FROM xf_user WHERE username='" + emailoruser + "'", _connection);
            MySqlCommand emailCommand = new MySqlCommand("SELECT * FROM xf_user WHERE email='" + emailoruser + "'", _connection);

            _connection.Open();


            MySqlDataReader userReader = userCommand.ExecuteReader();

            int? userId = null;

            while (userReader.Read())
            {
                userId = userReader.GetInt32("user_id");
            }

            userReader.Close();

            if (userId == null || userId == 0)
            {
                MySqlDataReader emailReader = emailCommand.ExecuteReader();

                while (emailReader.Read())
                {
                    userId = emailReader.GetInt32("user_id");
                }

                emailReader.Close();
            }

            _connection.Close();

            return userId;
        }
    }
  

MySql.Data.MySqlClient.MySqlException(0x80004005):无法连接到任何   指定的MySQL主机。   at MySql.Data.MySqlClient.NativeDriver.Open()   at MySql.Data.MySqlClient.Driver.Open()   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder)   设置)   at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()   at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()   at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()   at MySql.Data.MySqlClient.MySqlPool.GetConnection()   在MySql.Data.MySqlClient.MySqlConnection.Open()

1 个答案:

答案 0 :(得分:0)

我没有尝试对连接命令进行故障排除,但是当连接到远程计算机上的SQL DB时,以下内容适用于我

即使它是本地计算机,您也可以提供计算机名称,因此如果程序与数据库在同一台计算机上运行,​​或者程序在一台计算机上运行且数据库在另一台计算机上,则以下代码将起作用,只要两台机器联网,并且您运行该程序的帐户可以访问机器,实例和数据库。

请注意,在下面的示例中,安装SQL时使用了“默认”实例名称(MSSQLSERVER)。当数据库实例名称是默认名称时,您不能显式提供实例名称(如果这样做,您将收到错误)。您明确提供实例名称的唯一时间是它不是默认实例名称。下面的代码可以处理任一场景(通过将dbInstanceName变量设置为“”或实例名称,例如“\ SQLEXPRESS”)。见S.O. SQL Server:如何查找所有localdb实例名称。如果有疑问,请尝试一个空实例名称和一个您认为是实例名称的名称,以查看哪些有效。

string databaseMachineName = "machine_name";
string databaseInstanceName = ""; 
string dbName = "database_name";

using (SqlConnection sqlConnection = new SqlConnection("Data Source=" + databaseMachineName + databaseInstanceName + "; Initial Catalog=" + dbName + "; Integrated Security=True;Connection Timeout=10"))
{
   .
   .
   .
}