Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Windows服务通过网络访问SQL Server_C#_Sql Server_Windows Services - Fatal编程技术网

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

C# 从Windows服务通过网络访问SQL Server,c#,sql-server,windows-services,C#,Sql Server,Windows Services,我创建了一个类,该类将连接到SQL Server以运行存储过程。在Windows窗体解决方案中使用此类时,可以成功访问数据库。将该类放入Windows服务时,出现以下错误: 与网络相关或特定于实例的 建立数据库时出错 连接到SQL Server。服务器 找不到或无法访问。 验证实例名称是否正确 正确,并且SQL Server是 配置为允许远程访问 连接。(提供者:SQL网络) 接口,错误:26-错误定位 服务器/实例(已指定) 我怀疑问题与权限有关 这是相关代码的一部分: SqlConnecti

我创建了一个类,该类将连接到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)
SqlConnection-conn=newsqlconnection(j.ConnectionString);
SqlCommand cmd=新的SqlCommand(j.Query,conn);
cmd.CommandType=CommandType.Text;
SqlDataAdapter da=新的SqlDataAdapter(cmd);
数据集ds=新数据集(“表1”);

da.填写(ds,“表1”);// 该特定错误仅意味着客户端无法连接到服务器。这是在它执行权限之前。检查以确保应用程序服务器可以连接。有些事情可以尝试:

1) 通过端口1433(假定为默认端口)对服务器IP进行远程登录 如果这不起作用,是否有路由器或防火墙阻止对服务器的访问? 2) 转到应用服务器上的ODBC(数据源)并设置DNS条目,然后点击末尾的“测试”按钮。这将测试客户端驱动程序是否可以与SQL Server对话

步骤1很可能会失败。如果将服务器名称更改为“BigBird”,则会出现相同的错误。这是一个一般性错误,表示“您告诉我连接到此服务器,但没有服务器响应连接请求”。这发生在客户端和服务器之间进行“握手”和权限检查之前

嗯,,
Eric

当使用默认的“LocalService”登录时,Windows服务被限制使用网络资源。因此,您需要在允许访问网络的用户帐户下运行服务。以下是可能性:

1.)如果使用“NetworkService”连接,则不应在与SQL服务的连接上使用Windows的集成身份验证,但可以使用带有用户名和密码的SQL身份验证。(从技术上讲,如果您授予客户端计算机的域帐户(例如client$)对数据库的权限,则可以使用集成身份验证……但不建议这样做。)


2.)如果您将服务设置为在您选择的真实用户帐户下运行,则SQL连接可以使用Windows集成身份验证,但您必须授予该帐户对数据库的权限。

我将查看运行该服务的用户。它是本地用户吗?您使用的连接字符串是什么?您使用的是集成身份验证还是sql server身份验证?我尝试过使用“LocalService”、“NetworkService”、“LocalSystem”和“user”。连接字符串为“Persist Security Info=False;User ID=call\u tracker;Password=pCa11Tracker;Initial Catalog=CallData;Data Source=SQLData\CORP”,与Windows窗体应用程序使用的连接字符串完全相同(从配置文件读取字符串)。你总是在公共论坛上公布用户名和密码吗?它们不是真实的(更改以保护无辜者)。我同意错误消息的意思,但在Windows窗体应用程序中使用完全相同的代码时,我可以连接到SQL Server,将数据拉回到我的系统,并将数据写入文本文件。奇怪的是,Windows窗体应用程序可以工作,但Windows服务应用程序却不能。我只是想澄清这与权限无关。这与您使用的用户名无关。客户端和服务器根本无法相互通信。正确。谢谢你的评论。当我说“权限相关”时,我指的是“连接相关”。Windows窗体用于连接SQL Server的连接类型是什么?Windows身份验证?但是,Windows窗体应用正在成功连接,这就是我需要该服务进行连接的方式。这取决于您将其配置为执行的操作。如果使用用户名和密码,则可能是SQL身份验证;如果没有,可能是Windows集成身份验证(使用登录并运行应用程序的人员的凭据)。
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)