我正在创建Windows服务,它将使用ODBC DSN连接到数据库,而不是使用任何用户名/密码。 Windows服务设置为LocalService。 (我尝试将其更改为Netwrok Service以及LocalSystem) 我使用ODBC DSN,因为我将有不同类型的数据库(Sqlite,Sql,MySQl等)。 现在我得到了以下错误:
ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot open database "EmployeeDb" requested by the login. The login failed.
ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot open database "EmployeeDb" requested by the login. The login failed.
StackTrace: at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.Odbc.OdbcConnection.Open()
这是我使用dsn name
连接odbc的代码 var conn = new OdbcConnection(@"DSN=Employee");
conn.Open();
conn.Close();
答案 0 :(得分:0)
不使用任何用户名/密码。 Windows服务设置为LocalService。
如果您没有使用用户名/密码,那么您可能会使用帐户身份进行身份验证,即Windows身份验证。为此,服务需要在可以访问数据库的帐户中运行。 LocalService
和LocalSystem
永远不会有效:根据定义,这些帐户是本地的。 NetworkService
可能工作,如果您已经将计算机帐户(针对计算机的网络标识)添加到数据库服务器并获得了权限对于该数据库;但是,这里通常的方法是告诉服务在特定域帐户(作为服务帐户创建,使用“作为服务登录”权限)运行,并确保该帐户在数据库服务器上定义,并具有所请求数据库的权限。
调查:我假设你可以访问数据库;所以暂时更改服务以 运行,并查看它是否有效(假设您具有“作为服务登录”权限)。如果确实如此,那肯定是问题所在 - 请继续配置您希望它运行的实际帐户。