.net - 无法从 Windows 服务连接到 SQL LocalDB,WPF 应用程序和 SSMS 工作正常吗?

标签 .net sql-server windows-services database-connection connection-string

我正在开发的系统遇到一些问题。就这个问题而言,布局是 WiX 构建的 msi 安装程序,它安装 SQL LocalDB 2012、WPF 应用程序和 Windows 服务。 Windows 服务和 WPF 应用程序都与同一个数据库进行通信,应用程序由用户交互驱动,服务由计时器驱动。

一切都安装干净,数据库实例以混合模式安装,因此我的数据库初始化程序为实例和数据库创建了新的登录名和用户,并且在 SSMS 中它们似乎都配置正确。我可以使用新登录名登录并查询表。这是我用来创建登录的代码:

IF NOT EXISTS 
(SELECT loginname 
 FROM master.dbo.syslogins WHERE name = 'BP_SERVICELOGIN') 
 BEGIN 
   CREATE LOGIN[BP_SERVICELOGIN] WITH PASSWORD = 'pw';
   CREATE USER[bpUser] FOR LOGIN[BP_SERVICELOGIN] WITH DEFAULT_SCHEMA = dbo;     
   USE DatabaseName; 
   EXEC sp_addrolemember 'db_owner', 'bpUser' 
 END

所以我重申;此登录在 SSMS 中运行良好,并允许我登录并访问由 WPF 应用程序的初始值设定项创建的数据库。

但是,我无法从 Windows 服务登录到该数据库。我确保在连接字符串中使用新的登录名,并且所有内容都已正确设置。我怎么知道这个?因为当我将连接字符串复制到我的 WPF 应用程序并使用它而不是 Windows 身份验证时,它可以工作!?!

服务不断失败并显示消息:

"System.Data.Entity.Core.EntityException: The underlying provider failed on Open. in EntityFramework:File: Method:Open Line:0 Column:0   System.Data.SqlClient.SqlException: Login failed for user 'BP_SERVICELOGIN'. in .Net SqlClient Data"

这是我正在使用的连接字符串:

<add name="ConnStringName" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=DbName;User Id=BP_SERVICELOGIN;Password=pw;MultipleActiveResultSets=True;Application Name=ServiceName" />

似乎存在一些障碍导致 Windows 服务的连接无法正常连接,而其他服务则没有这样的问题。 LocalDB 安装是全新的,除了创建的数据库和登录/用户之外,在 OOB 状态下没有对其进行任何操作。

有人可以帮忙吗?

最佳答案

我不是 Windows 服务方面的专业人士。

我认为问题出在你编写的Windows服务中。使用 session 零隔离,您可能必须在指定的用户帐户中运行 Windows 服务。
如果您可以提供 Windows 服务运行的用户帐户,将会很有帮助。默认情况下,该服务在称为 SYSTEM 帐户的不同用户帐户中运行。该帐户可能没有访问数据库的权限。这可能会导致问题。

关于.net - 无法从 Windows 服务连接到 SQL LocalDB,WPF 应用程序和 SSMS 工作正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445629/

相关文章:

c# - ADO.NET 连接字符串错误

.net - 如何更改 Excel 数据透视表的源数据

c - windows xp下如何监控windows服务的状态变化?

.net - 如何正确处理频繁变化的.Net windows服务

c# - 如何从与桌面交互的应用程序与 Windows 服务通信?

c# - 调用 INotifyPropertyChanged 的​​ PropertyChanged 事件的最佳方式是什么?

.net - 如何删除 Entity Framework 4.1 生成的外键名称中的下划线

sql-server - 如何从数据库中删除所有表?无法从sys.tables中删除

sql - ODBC不断提示输入密码

sql - 我可以在 WHERE 子句中使用 CASE 表达式吗?