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

标签 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 名称连接 odbc 的代码

 var conn = new OdbcConnection(@"DSN=Employee");
 conn.Open();
 conn.Close();

最佳答案

not using any username/password. Windows service is set as LocalService.

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

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

关于c# - 无法使用 Windows 服务从 odbc 连接(使用 dsn)打开数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49294955/

相关文章:

c# - 从 WCF 测试客户端调用时,WebBrowser 控件未在自承载 WCF 服务中导航

c# - 保存图像时出现错误 : A generic error occurred in GDI+.

.net - 使用自定义异常类抛出多个异常

c# - 空对象检查

c# - 在 C#/Xamarin 中等待线程完成

c# - ASP.net MVC 自定义声明

.net - 更改 log4net 配置以每 x 小时创建一个新日志

c# - .Net 2.0 Windows 服务在垃圾回收期间挂起

delphi - 连接 Windows 服务中的映射驱动器盘符

c# - 启动 Windows 服务的超时时间是多少?