无法使用Windows服务从odbc连接(使用dsn)打开数据库?

时间:2018-03-15 08:51:27

标签: c# .net windows-services odbc

我正在创建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();

1 个答案:

答案 0 :(得分:0)

  

不使用任何用户名/密码。 Windows服务设置为LocalService。

如果您没有使用用户名/密码,那么您可能会使用帐户身份进行身份验证,即Windows身份验证。为此,服务需要在可以访问数据库的帐户中运行。 LocalServiceLocalSystem永远不会有效:根据定义,这些帐户是本地的。 NetworkService 可能工作,如果您已经将计算机帐户(针对计算机的网络标识)添加到数据库服务器并获得了权限对于该数据库;但是,这里通常的方法是告诉服务在特定域帐户(作为服务帐户创建,使用“作为服务登录”权限)运行,并确保该帐户在数据库服务器上定义,并具有所请求数据库的权限。

调查:我假设可以访问数据库;所以暂时更改服务以 运行,并查看它是否有效(假设您具有“作为服务登录”权限)。如果确实如此,那肯定是问题所在 - 请继续配置您希望它运行的实际帐户。