c# - 无法连接到远程主机
问题描述
连接到远程主机时遇到问题。我可以使用数据库副本连接到本地服务器。
我正在尝试连接到我的网络主机上的 XenForo DB 并获取一些信息。一切都在本地主机上工作。
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();
}
那是代码,它抛出了这个错误
连接必须有效且打开。在 MySql.Data.MySqlClient.ExceptionInterceptor.Throw(Exception 异常) 在 MySql.Data.MySqlClient.MySqlCommand.CheckState() 在 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 主机。在 MySql.Data.MySqlClient.NativeDriver.Open() 在 MySql.Data.MySqlClient.Driver.Open() 在 MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder 设置) 在 MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()在 MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() 在 MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() 在 MySql.Data.MySqlClient.MySqlPool.GetConnection() 在 MySql.Data.MySqlClient.MySqlConnection.Open()
解决方案
我没有尝试对您的连接命令进行故障排除,但是在连接到远程计算机上的 SQL DB 时,以下内容对我有用
即使它是本地机器,您也可以提供机器名称,因此如果程序与数据库在同一台机器上运行,或者如果程序在一台机器上运行而数据库在另一台机器上,那么下面的代码将起作用,这么久因为两台机器是联网的,并且您运行程序的帐户可以访问机器、实例和数据库。
请注意,在下面的示例中,安装 SQL 时使用了“默认”实例名称 (MSSQLSERVER)。当数据库实例名称是默认名称时,您不得显式提供实例名称(如果这样做会出现错误)。唯一显式提供实例名称的情况是它不是默认实例名称。下面的代码可以处理任何一种情况(通过将 dbInstanceName 变量设置为“”或实例名称,例如“\SQLEXPRESS”)。请参阅 SO 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"))
{
.
.
.
}
推荐阅读
- bigcommerce - BigCommerce Stencil - 使用前端的 GraphQL 查询不返回任何内容
- wordpress - WordPress 下载文件而不是在浏览器中打开
- r - 使用条件创建新列
- javascript - 使用 React JS 从 firebase 存储下载音频文件
- accelerometer - 如何将 6 个加速度脉冲转换为刚体的 3 个平移和 3 个旋转运动?
- vue.js - 有没有办法在 Vuetify-jsonschema-form Vue js 中更改步进表单的图标?
- xml - 将变量分配给 Python 文件名
- c++ - 没有运算符匹配这些操作数,将学生对象添加到指针数组
- python - 如何修复自相交四面体网格
- python - 如何在 django rest 框架中自动填充只读序列化器字段?