我创建了一个连接到SQL Server以运行存储过程的类。在Windows窗体解决方案中使用此类时,可以成功访问该数据库。当该类被放入Windows服务时,我收到以下错误:
与网络相关或特定于实例的 建立一个错误时发生错误 连接到SQL Server。服务器 没找到或无法访问。 验证实例名称是否为 正确和SQL Server是 配置为允许远程 连接。 (提供者:SQL网络 接口,错误:26 - 错误定位 指定的服务器/实例)
我怀疑问题与权限有关。
这是相关代码的一部分:
SqlConnection conn = new SqlConnection(j.ConnectionString);
SqlCommand cmd = new SqlCommand(j.Query, conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet("Table1");
da.Fill(ds, "Table1"); // <----- error occurs here (Windows Service only)
SQL Server版本是
Microsoft SQL Server 2008 (SP1) - 10.0.2766.0 (X64)
Enterprise Edition (64-bit) on Windows NT 5.2 <X64>
(Build 3790: Service Pack 2)
Visual Studio版本为Microsoft Visual C# 2008
框架版本为3.5 SP1
。
答案 0 :(得分:3)
使用默认的“LocalService”登录时,Windows服务仅限于使用网络资源。因此,您需要在允许访问网络的用户帐户下运行服务。以下是可能性:
1。)如果使用“NetworkService”连接,则不应在与SQL Service的连接上使用Windows集成身份验证,但可以使用带有用户名和密码的SQL身份验证。 (从技术上讲,如果您将客户端计算机的域帐户(例如CLIENT $)授予数据库权限,您可以使用集成身份验证......但不建议这样做。)
2.。)如果您将服务设置为在您选择的真实用户帐户下运行,则SQL连接可以使用Windows集成身份验证,但您必须为该帐户授予该帐户的权限。
答案 1 :(得分:1)
该特定错误仅表示客户端无法连接到服务器。这是在它甚至做权限之前。检查以确保应用服务器可以连接。有些事要尝试:
1)通过端口1433 telnet到服务器IP(假设默认端口) 如果这不起作用,是否有路由器或防火墙阻止访问服务器? 2)转到应用服务器上的ODBC(数据源)并设置DNS条目,然后点击最后的“测试”按钮。这将测试客户端驱动程序是否可以与SQL Server通信。
最有可能的步骤1将失败。如果您将服务器名称更改为“BigBird”,则会出现相同的错误。这是一个通用错误,说“你告诉我连接到这个服务器,但没有服务器响应连接请求”。这发生在客户端和服务器之间发生“握手”和权限检查之前。
HTH, 埃里克