我在我自己的电脑A上写了一个简单的service程序,里面有一段打开数据库的代码,如果单独把这块代码拿出来放到一般的程序里直接执行一点问题都没有,可是放到service里就会出现如下错误:
System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。
   at System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction)
   at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
   at System.Data.SqlClient.SqlConnection.Open()
无论是用OleDb还是Odbc都是这样。服务器是局域网内另一台机器C,采用混合验证模式更奇怪的是,如果换成我旁边的一台机器B的数据库,那么连接又是正常的,百思不得其解。
是否在service中访问网络时的身份会有所变化?而在服务器端某些安全设置拒绝了这种访问呢?

解决方案 »

  1.   

    我在我自己的电脑A上写了一个简单的service程序,里面有一段打开数据库的代码,如果单独把这块代码拿出来放到一般的程序里直接执行一点问题都没有,可是放到service里就会出现如下错误:
    System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。
       at System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction)
       at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
       at System.Data.SqlClient.SqlConnection.Open()
    无论是用OleDb还是Odbc都是这样。服务器是局域网内另一台机器C,采用混合验证模式更奇怪的是,如果换成我旁边的一台机器B的数据库,那么连接又是正常的,百思不得其解。
    是否在service中访问网络时的身份会有所变化?而在服务器端某些安全设置拒绝了这种访问呢?
    我在我自己的电脑A上写了一个简单的service程序,里面有一段打开数据库的代码,如果单独把这块代码拿出来放到一般的程序里直接执行一点问题都没有,可是放到service里就会出现如下错误:
    System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。
       at System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction)
       at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
       at System.Data.SqlClient.SqlConnection.Open()
    无论是用OleDb还是Odbc都是这样。服务器是局域网内另一台机器C,采用混合验证模式更奇怪的是,如果换成我旁边的一台机器B的数据库,那么连接又是正常的,百思不得其解。
    是否在service中访问网络时的身份会有所变化?而在服务器端某些安全设置拒绝了这种访问呢?
    我在我自己的电脑A上写了一个简单的service程序,里面有一段打开数据库的代码,如果单独把这块代码拿出来放到一般的程序里直接执行一点问题都没有,可是放到service里就会出现如下错误:
    System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。
       at System.Data.SqlClient.ConnectionPool.GetConnection(Boolean& isInTransaction)
       at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
       at System.Data.SqlClient.SqlConnection.Open()
    无论是用OleDb还是Odbc都是这样。服务器是局域网内另一台机器C,采用混合验证模式更奇怪的是,如果换成我旁边的一台机器B的数据库,那么连接又是正常的,百思不得其解。
    是否在service中访问网络时的身份会有所变化?而在服务器端某些安全设置拒绝了这种访问呢?
      

  2.   

    我觉得还是你SQL Server设置的问题,不信你可以找其他人的电脑来访问你的SQL Server,估计错误一样的
      

  3.   

    是这样的,对于连接那台数据库服务器C,如果是在直接双击运行exe程序是很好的,没有任何错误,只是一放到service中,由windows来启动服务的话就错了,很郁闷的。但如果在service中连接服务器B却又是好的,所以我确实怀疑可能是C的设置问题,但是具体是什么问题就不清楚了
      

  4.   

    难道除了重装就没有别的办法了吗?唉。。
    我怀疑就是windows server 2003上的安全设置方面有问题,就是不知道怎么改
      

  5.   

    你把“打开数据库的代码”单独写成一个类,然后分别在Windows Service和应用程序里调用,看看他们执行是否一致。可以跟踪一下Windows Service的运行。