【发布时间】:2016-01-31 10:45:16
【问题描述】:
我正在开发的系统遇到了一些问题。就这个问题而言,布局是一个 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 状态下没有对其进行任何操作。
谁能帮忙?
【问题讨论】:
-
嗨!你试过this吗?
-
你在使用多个实例吗?!如果是,请尝试将实例名称添加到连接字符串中。
-
SqlLocalDb info "MyInstance",它返回什么?
-
很可能是权限问题...您看过这里吗? stackoverflow.com/questions/26597498/…
-
Cucu:我没有使用多个实例,这个解决方案必须从分布式安装程序中运行,所以我只是运行了 LocalDB 的默认安装路径,并且正在使用以混合模式运行的自动实例。跨度>
标签: .net sql-server windows-services database-connection connection-string