服务程序连接远程SQLSERVER数据库失败

mayudong1 2009-04-24 06:58:48
加精
我做了一个服务程序,当把服务安装好以后在服务管理器中启动服务时,如果连接的是本机的数据库,就能正常运行,但当连接其他机器上的数据库时就会连接失败,错误原因是什么“用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。”
但当我在DEBUG模式下运行(不通过服务管理器启动,而是调用另一个普通函数启动,就像运行普通程序一样)时,同样的连接那台机器的数据库却可以正常运行
我感觉他们的区别就是一个在系统级别下运行,另一个是在用户级别下运行,难道连接方法还不一样吗?
可如果连接的是本机的数据库就不管怎么运行都没有问题
望高手指教
...全文
1904 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
Finalhao 2012-05-28
  • 打赏
  • 举报
回复
我也遇到过这样的问题 连接的是MYSQL 刚开始 在用户DSN里面配置的 数据源 本地EXE没问题 但是 要是 从服务启动连接数据库出错 最后改成了 在系统DSN里面配置 结果成功了!
coolboy4me 2011-10-31
  • 打赏
  • 举报
回复
if(!AfxOleInit())//这就是初始化COM库
{
g_Log.WriteDebugLog(_T("com库初始化错误"));
}
g_ptrCommand.CreateInstance(__uuidof(Command));
g_pRecordset.CreateInstance(__uuidof(Recordset));
g_pConnection.CreateInstance(__uuidof(Connection));

try
{
g_pConnection->Open((_bstr_t)"Driver={SQL Server};Server=.\\SQLEXPRESS;Database=master","","",adModeUnknown);
}
catch(_com_error e)
{
g_Log.WriteDebugLog(_T("数据库连接出错"));
}

这是我的链接代码。。。在普通的exe程序里面好用。。
coolboy4me 2011-10-31
  • 打赏
  • 举报
回复
楼主,我也遇到了一个类似的问题。。同样的一段连接代码,前台界面程序可以连接,而在服务程序里面就总是抛出异常。。请教楼主是怎样连接数据库的呢???
dbsc28344 2011-07-31
  • 打赏
  • 举报
回复
将sqlserver服务用账号登陆账号名称为administrator 密码为你的administrator用户的密码从新启动服务就可以了
wangcom 2010-02-22
  • 打赏
  • 举报
回复
要建成系统的DSN服务,后台服务才连接得到数据库
williamluo 2009-05-04
  • 打赏
  • 举报
回复
>我还不知道什么是域用户呢。还有怎么创建域用户呢?
域用户就是指在所谓“活动目录”中集中管理的用户帐号。
我以为你的网络是一个有活动目录的网络,看样子不是,好像是一个工作组。
要创建域用户,首先需要创建一个域控制器,这个说来话长,你就不要关心了。
现在,你就把服务启动帐号设置为登录Windows用的是用户和密码,试试看。
mayudong1 2009-05-01
  • 打赏
  • 举报
回复
家里只有一台电脑,没办法试验了
五一回公司再说
mayudong1 2009-05-01
  • 打赏
  • 举报
回复
谢谢大家的回复了,刚出差几天,这个问题还没有解决,给人装的东西就把数据库和那个服务装到一起了,暂时就先这么着。

回56楼:我还不知道什么是域用户呢。还有怎么创建域用户呢?很小白吧!哈哈,大家别笑我啊
williamluo 2009-04-30
  • 打赏
  • 举报
回复
楼主不是说了“在DEBUG模式下运行(不通过服务管理器启动,而是调用另一个普通函数启动,就像运行普通程序一样)时,同样的连接那台机器的数据库却可以正常运行”吗?
可以肯定不是网络连接、软件版本之类的问题。
也可以肯定不是连接字串或者登录ID的问题,当然也不是SQL Server验证方式(Windows集成 or 混合模式)的问题。
应该是安全性身份问题,不知道楼主有没有根据我30楼的建议做一下试验?
sn173453751 2009-04-29
  • 打赏
  • 举报
回复
我建议你使用专业版或企业版的
lijizun 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mynamelj 的回复:]
你安装的是Express版的吧,Express初始时只能进行本地连接。建议你使用专业版或企业版的。
[/Quote]
支持!
mybelta2 2009-04-29
  • 打赏
  • 举报
回复
cnn = "PROVIDER=SQLOLEDB;DATA SOURCE=远程SQLserverIP地址;UID=**;PWD=**;DATABASE=***
goodider 2009-04-29
  • 打赏
  • 举报
回复
如果你代码没问题就要看SQL版本和权限问题了。
eyoung000 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 zhanglei_love2008 的回复:]
打开"企业管理器"--->>sql server组-->>(local)(windows nt)-->>右键属性--->>安全性-->>身份验证:勾选sql server 和windows 点击确定,重新启动一下sql 就可以了。
或者你的sql server 注册用问题,你可以删除现有的sql server 注册,新建一个sql server 注册。
[/Quote]
你的sqlserver最好是企业版的,除了上面所说的修改数据库的验证方式外:
1. ping xxx.xxx.xxx.xxx,如ping 192.168.1.11,通过后;
2.telnet 192.168.1.11 1433,看1433(端口)是否通的,要是不通,关闭服务器上的防火墙,或在防火墙中添加端口port:1433例外再看看通不?
3. 2 要不成,修改Local服务器的属性,选择下面的网络配置:tcp/ip-》属性改为1166(你自己改个合适的有效的端口即可),然后ADO连接字串改为如:
_bstr_t strConnect = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=HRsys;Data Source=192.168.1.11,1166;Password =123456";
w20011025 2009-04-29
  • 打赏
  • 举报
回复
学习
中年秃头大叔 2009-04-28
  • 打赏
  • 举报
回复
打开"企业管理器"--->>sql server组-->>(local)(windows nt)-->>右键属性--->>安全性-->>身份验证:勾选sql server 和windows 点击确定,重新启动一下sql 就可以了。
或者你的sql server 注册用问题,你可以删除现有的sql server 注册,新建一个sql server 注册。
try__again 2009-04-28
  • 打赏
  • 举报
回复
有可能是SP4补丁没打
youfuh 2009-04-28
  • 打赏
  • 举报
回复
不懂
yooyoozoo 2009-04-28
  • 打赏
  • 举报
回复
权限不够?
jjjiaml 2009-04-28
  • 打赏
  • 举报
回复
加载更多回复(44)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧