【发布时间】:2020-06-10 02:58:14
【问题描述】:
使用Data Connections 下的SSMS 和Visual Studio 2015 的Server Explorer 选项卡,我可以毫无问题地在远程服务器KOSH 上执行查询。为什么在 Visual Studio/IIS Express 本地运行的 MVC 应用程序无法做到这一点?
使用VS2015的连接Properties,我得到它的连接字符串:
Data Source=123.456.78.9;Persist Security Info=True;User ID=Foo;Password=Bar
使用该连接字符串,MVC 应用程序会收到:
“发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:命名 Pipes Provider,错误:40 - 无法打开与 SQL 的连接 服务器)”
内部异常消息:
“找不到网络路径”
我知道服务器/防火墙/网络设置是正确的。这样就离开了应用程序。
using(var connection = Database.Connection(conInfo.ConnectionString, provider)) {
// rowCountSql: SELECT SUM(rows) TM_ROWCOUNT FROM sys.partitions
// WHERE object_id = object_id(@tableName) and index_id IN (0,1)
// Any other SQL yields same error
var countTask = connection.QueryAsync(rowCountSql, new { tableName = Editor.TableName });
}
使用异步是因为 Oracle 版本的查询可能需要几秒钟才能返回。 该应用程序应该是正确的,因为它从家里(也是服务器的位置)连接到同一台服务器,并连接到运行 2008R2 到 2014 的远程数据中心中的相同数据库,没有问题。
Database.Connection() 是:
// This is unlikely to be the problem as it is very well tested
public static DbConnection Connection(string connectionString, string databaseProvider) {
DbProviderFactory databaseFactory = DbProviderFactories.GetFactory(databaseProvider);
DbConnection connection = databaseFactory.CreateConnection();
if(connection != null)
connection.ConnectionString = connectionString;
return connection;
}
我敢打赌我遗漏了一些简单的东西,但如果能得到帮助,我将不胜感激。
【问题讨论】:
-
你确定你的 conInfo.ConnectionString 是正确的吗?
-
您的 Oracle DB 没有名称吗?使用 IP 地址通常是一种高级选项。
-
@Henrique:我有很多奇妙的理由可以确定
conInfo.ConnectionString包含我一直在编辑的字符串,所有这些显然都是错误的,因为这就是问题所在。 (打脸)。谢谢。如果您以完整回复的形式发布,我会将其标记为正确,因为“无论如何都要检查明显的内容”通常是解决方案。 -
@silkfire:我们所有的服务器都已命名。我同意,在大多数情况下使用 IP 会很奇怪。在这种情况下我使用了一个 IP,因为我们的 DNS 还不知道这个特定服务器的 IP。
-
试试
Data Source=(HOST=123.456.78.9)
标签: c# sql-server visual-studio-2015 connection-string