使用c#.net 4.6.1我有一个程序试图查询MS SQL Server 2016数据库。我有2个远程服务器,服务器A和服务器B。我的c#程序在服务器A上运行没有问题。在服务器B上运行程序时,出现以下错误:
System.Data.SqlClient.SqlException(0x80131904):与网络相关或 建立与以下对象的连接时发生实例特定错误 SQL Server。服务器未找到或无法访问。校验 实例名称正确且已配置SQL Server 允许远程连接。 (提供者:命名管道提供者,错误: 40-无法打开与SQL Server的连接)---> Syste m.ComponentModel.Win32Exception(0x80004005):在以下位置拒绝访问 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdent 身份,SqlConnectionString connectionOptions,SqlCredential 凭据,对象providerInfo,字符串newPassword,SecureString newSecurePassword,布尔型redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData r econnectSessionData, DbConnectionPool池,字符串accessToken,布尔值applyTra nsientFaultHandling,SqlAuthenticationProviderManager sqlAuthProviderManager) System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOp 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConn连接池,DbConnection owningConnection,DbConnectionOptions userOptions)
在System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConn ectionPool池,DbConnection owningObject,DbConnectionOptions 选项,DbConne ctionPoolKey poolKey,DbConnectionOptions userOptions) System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection 拥有对象,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection o wningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)位于 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection ow ningObject,UInt32 waitForMultipleObjectsTimeout,布尔值 allowCreate,布尔值nlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&连接) System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection ow ningObject,TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbCon nectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource
1重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection, DbConnectionInternal&connection) System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(Db 连接externalConnection,DbConnectionFactory connectionFactory, TaskCompletio nSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1重试,DbConnectionOptions userOptions)位于 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 re try) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1 重试)在System.Data.SqlClient.SqlConnection.Open()在 YetAnotherSmallConsoleApp.Program.Main(String [] args)在 C:\ Repository \ Pro jects \ YetAnotherSmallConsoleApp \ YetAnotherSmallConsoleApp \ Program.cs:line 28 ClientConnectionId:00000000-0000-0000-0000-000000000000
这是我的程序:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.IO;
namespace YetAnotherSmallConsoleApp
{
class Program
{
static void Main(string[] args)
{
SqlConnection con = new SqlConnection("Server = IP_ADDRESS; User Id = USER_NAME; Password = PASSWORD;");
string[] arrExcludeLines = File.ReadAllLines(FILEPATH_TO_QUERY);
string strExcludeQuery = default(string);
foreach (string line in arrExcludeLines)
{
strExcludeQuery = strExcludeQuery + line + Environment.NewLine;
}
try
{
using (con)
{
con.Open();
SqlCommand cmdExclude = new SqlCommand(strExcludeQuery, con);
SqlDataReader dr1 = cmdExclude.ExecuteReader();
while (dr1.HasRows)
{
while (dr1.Read())
{
Console.WriteLine(dr1[0].ToString());
Console.ReadLine();
}
dr1.NextResult();
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
}
}
}
从读取con.Open();
的行引发错误。这是有关服务器的一些事实:
这些是我可以想到的唯一在服务器A和服务器B之间进行比较的东西。显然,服务器A和服务器B之间存在一些不同之处,它允许程序在服务器A上成功运行。我不知道是否服务器A上的配置与服务器B上的配置有所不同,或者我的MS SQL Server 2016数据库服务器上配置了某些内容,允许服务器A在程序运行时成功连接到数据库,但阻止了程序连接到数据库并在服务器B上成功运行。如果有人可以给我任何有关如何解决此问题的建议,以便能够使程序在服务器BI上运行,将不胜感激。预先感谢。
编辑:当我尝试使用与我使用SSMS从服务器A连接到数据库的相同凭据从服务器B连接到MS SQL Server 2016数据库时,出现以下错误:
编辑:另一件事:我尝试使用连接字符串中的MS SQL Server 2016数据库服务器的计算机名称以及连接字符串中的数据库服务器的实际IP地址来运行程序种方式导致能够在服务器A上成功运行程序,但是我在服务器B上收到错误消息。
答案 0 :(得分:0)
尝试一下:
mofcomp“%programfiles(x86)%\ Microsoft SQL Server \ 140 \ Shared \ sqlmgmproviderxpsp2up.mof“
140是您的sql server的版本,请将其更改为您尝试使用的正确版本。
这对我有用,但我不确定这是您的问题
答案 1 :(得分:-1)
肯定是由于错误的连接字符串导致的这种类型的错误。确认并确保服务器的连接字符串相同,