通过网络从Windows服务访问SQL Server

时间:2010-07-01 14:13:43

标签: c# sql-server windows-services

我创建了一个连接到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

2 个答案:

答案 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, 埃里克