Windows服务中没有数据库连接

时间:2009-06-18 23:31:24

标签: sql-server windows database service c++builder

我正在尝试在CBuilder 6(目标XP专业版)中编写服务。该服务的一部分工作是监视和更新数据库上的表。我们使用直接ODBC连接到数据库,但问题也发生在ADO上,因此我们将使用它来实现简单。

您可以在下面看到我的代码。这是从ServiceStart事件中执行的函数调用的。

我的问题是,我无法获得连接。我们的MSSQL DB使用域身份验证,因此我尝试使用我的域帐户运行该服务。我也尝试过明确定义我的域名\用户名和密码,但这也不起作用(在服务的属性中,登录标签)。

任何人都可以帮我这个吗?任何事情都值得赞赏。

我的另一个问题是如何调试服务?我安装了远程调试器。我是否使用像rundll32.exe之类的东西来生成进程?再次,任何帮助欣赏。

非常感谢

斯图。

代码段:

TADOConnection* DB = new TADOConnection(this);
  try
  {
    DB->ConnectionString = "Provider=MSDASQL.1;Password=password;Persist Security Info=True;User ID=usernamej;Data Source=datasource";
    DB->Connected = true;

    returnValue = DB->Connected;
    ShowMessage("Connected");
  }
  catch (Exception &exception)
  {
    ShowMessage("Not COnnected");
  }

注意:connectionstring属性仅供参考,并且已更改用户名,密码和数据库。在独立应用程序中使用此字符串会导致连接成功,并且可以使用查询获取数据。


回应JP:

你好JP。

感谢您的评论。我实际上没有在这里抛出异常(这很奇怪)。我修改了代码(见下文)以包含更多的msgbox,我看到的唯一一个是第一个 - 尝试连接。

ShowMessage("Attempting Login"); 
TADOConnection* DB = new TADOConnection(NULL); 
try { 
  ShowMessage("1"); 
  DB->ConnectionString = "<as before>"; 
  ShowMessage("2"); 
  DB->Connected = true; 
  ShowMessage("Connected"); 
} catch (Exception &exception) { 
  ShowMessage(exception.Message); 
  ShowMessage("Not COnnected"); 

} 

有什么想法吗?我不明白为什么甚至没有创建连接组件(注意我尝试将所有者从此更改为NULL以及看看会发生什么)。

谢谢!

斯图。

2 个答案:

答案 0 :(得分:1)

如果您使用的是域身份验证,则连接字符串中不应包含用户名或密码:

Server=myServerName\theInstanceName;Database=myDataBase;Trusted_Connection=True;

或来自http://www.connectionstrings.com/sql-server-2005

的适当变体

您的计算机需要是域的成员,数据库服务器才需要信任该域。该服务需要在计算机所属的域下的帐户下运行。

答案 1 :(得分:0)

您遇到的是Windows服务权限问题。

  • 从本质上讲,服务生活在较低的权限环境中。

  • 我建议您登录事件日志。

  • 只有在启用了交互式桌面的本地服务中运行时,才会显示生成的窗口。