连接到远程主机时遇到问题。我可以使用数据库的副本连接到本地服务器。
我正在尝试连接到我的网络主机上的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()
答案 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"))
{
.
.
.
}