的C#代码段会用来连接到SQL Server 2008实例(默认情况下,未命名实例):SQL登录SQL Server 2008上没有为远程连接
using (SqlConnection conn = new SqlConnection(sqlConnType))
{
conn.Open();
using (SqlCommand query = conn.CreateCommand())
{
query.CommandText = ConfigurationManager.AppSettings["query"].ToString();
using (SqlDataReader dataReader = query.ExecuteReader())
{
if (dataReader.HasRows && dataReader.Read())
{
// do something with the result
}
}
}
}
基于命令行参数,sqlConnType
(使用的参数来实例化一个SqlConnection对象)是下述之一:
Windows集成认证:Data Source=<ServerName>;database=<DatabaseName>;Integrated Security=True
SQL验证:server=<ServerName>;database=<DatabaseName>;user id=<UserID>;pwd=<Password>
我已添加防火墙规则以允许SQL通信。命名管道和TCP/IP已启用。 Windows和SQL Server身份验证也都启用。现在奇怪的部分...
当使用上述代码的应用程序使用Int远程连接到SQL Server时。 Windows身份验证,连接工作得很好。然而,当我尝试使用SQL Server身份验证进行远程连接,我得到的错误:Cannot open database "<DatabaseName>" requested by the login. The login failed. Login failed for user '<UserID>'.
如果我打印出异常的堆栈跟踪,我得到的是这样的:
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身份验证凭据登录? – 2013-05-08 19:03:24
我以为我可以......现在看起来像是不工作。 – 2013-05-08 19:04:12
找出来,你很可能会有一个解决方案。就域验证而言,您的应用是否在该凭证下运行? – 2013-05-08 19:05:06