我正在创建 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 名称连接 odbc 的代码
var conn = new OdbcConnection(@"DSN=Employee");
conn.Open();
conn.Close();
最佳答案
not using any username/password. Windows service is set as LocalService.
如果您没有使用用户名/密码,那么您可能正在使用帐户身份进行身份验证,即 Windows 身份验证。为此,该服务需要在有权访问数据库的帐户中运行。 LocalService
和 LocalSystem
永远不会工作:根据定义,这些帐户是本地的。 NetworkService
可能工作,如果您已将机器帐户(用于机器的网络身份)添加到数据库具有该数据库权限的服务器;然而,这里通常的方法是告诉服务在特定域帐户中运行(作为服务帐户创建,具有“作为服务登录”权限),并确保该帐户是在数据库服务器上定义的,并且有权访问所请求的数据库。
调查:我假设您可以访问数据库;所以暂时更改服务以您运行,并查看它是否有效(假设您具有“作为服务登录”权限)。如果是这样,那肯定是问题所在 - 所以继续配置您希望它运行的实际帐户。
关于c# - 无法使用 Windows 服务从 odbc 连接(使用 dsn)打开数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49294955/