Sql server 2008 SQL Server 2008上远程连接的SQL登录失败

Sql server 2008 SQL Server 2008上远程连接的SQL登录失败,sql-server-2008,database-connection,sqlconnection,Sql Server 2008,Database Connection,Sqlconnection,此C#代码片段用于连接到SQL Server 2008实例(默认,未命名实例): 根据命令行参数,sqlConnType(用于实例化SqlConnection对象的参数)是以下参数之一: 集成Windows身份验证:数据源=;数据库=;集成安全=真 SQL身份验证:server=;数据库=;用户id=;pwd= 我添加了防火墙规则以允许SQL流量。已启用命名管道和TCP/IP。还启用了Windows和SQL Server身份验证。现在奇怪的部分 当使用上述代码的应用程序使用Int.Windows

此C#代码片段用于连接到SQL Server 2008实例(默认,未命名实例):

根据命令行参数,
sqlConnType
(用于实例化SqlConnection对象的参数)是以下参数之一:

集成Windows身份验证:
数据源=;数据库=;集成安全=真

SQL身份验证:
server=;数据库=;用户id=;pwd=

我添加了防火墙规则以允许SQL流量。已启用命名管道和TCP/IP。还启用了Windows和SQL Server身份验证。现在奇怪的部分

当使用上述代码的应用程序使用Int.Windows身份验证远程连接到SQL Server时,连接工作正常。但是,当我尝试使用SQL Server身份验证进行远程连接时,会出现错误:
无法打开登录请求的数据库“”。登录失败。用户“”的登录失败。
如果我打印异常的堆栈跟踪,我会得到如下结果:

at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at App.Program.Main(String[] args) in C:\App\Program.cs:line 31
注意:如果在SQL Server上本地运行应用程序,Int.Windows身份验证可以工作,但不会再次运行SQL登录身份验证。同一应用程序可以在两种身份验证模式下使用相同的代码和相同的连接字符串与较旧版本的SQL Server(如2005)进行通信


我做错了什么?这是我缺少的SQL Server 2008特有的东西吗?

感谢所有看过这篇文章并提供反馈的人!这是一个错误的警报,因为我看错了服务器。几个月前,我安装了一台更新的服务器,并将所有数据库迁移到那里。我使用旧服务器主机名设置SQL别名,以路由到新服务器。我忘记了这一点,坚持在旧服务器上解决问题。在整个过程中,新服务器仅为Windows Auth配置,我只需将其更改为混合模式Auth。这解决了问题

当您遇到连接问题时,我确实遇到了一些有见地的链接:


您可以在本地使用SQL身份验证凭据登录吗?我想我可以。。。现在看来这也行不通。弄明白了,你可能会有一个解决办法。就域身份验证而言,您的应用程序是否在该凭据下运行?是的,对于域身份验证,应用程序正在该凭据下运行。无论是远程还是本地,如果我使用SQL Management Studio访问SQL Server,我都可以通过SQL Server身份验证和指定SQL登录的凭据来访问它。只有通过代码,我不能,好像我的连接字符串有问题。SQL Server登录是否有特定于SQL Server 2008的连接字符串?我查看了ConnectionString.com并尝试了一些。。。没有帮助。是的,该应用程序可以与SQL Auth一起工作,无论是远程还是本地。
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
at App.Program.Main(String[] args) in C:\App\Program.cs:line 31