关于数据库远程访问的问题! 解决之后继续加分!

秀小川 2012-03-16 09:32:33


try
{
HRESULT hr =pConn.CreateInstance("ADODB.Connection");
if (FAILED(hr))
{
AfxMessageBox("初始化失败!");
}
CString str;
str = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data ource =192.168.1.16";
_bstr_t strConnect =str;
pConn->Open(strConnect,"","",adModeUnknown);
}
catch (_com_error e)
{

AfxMessageBox(e.Description());
}

HRESULT hr = pCommand.CreateInstance(__uuidof(Command));
hr = pRecordset.CreateInstance(__uuidof(Recordset));
pCommand->ActiveConnection = pConn;
pCommand->CommandText = "select * from TestTab ";
if (FAILED(hr))
{
pRecordset = NULL;
AfxMessageBox("can't create an instance of Recordset");
}
try
{
pRecordset=pCommand->Execute(NULL,NULL,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}


这段代码在自己机器上执行没问题,在同一局域网下别人机器上执行,红色部分会出错,提示对象名TestTab无效!
...全文
193 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
秀小川 2012-03-16
  • 打赏
  • 举报
回复
UP
秀小川 2012-03-16
  • 打赏
  • 举报
回复
找到问题了,我把我我的“TestTab”换成master里面的表就可以了!
不过我前面打开的是TestTab 所在的数据库Test,这个怎么解决!
秀小川 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 littlecommit 的回复:]

如果没有开启的话,就到数据库的服务和连接的外围应用配置器里的远程连接中开启,主要重启数据库服务,然后再试一下
[/Quote]
我在别人的机器上用查询分析器以及企业管理器 都能进我的数据库!
这样算不算开启远程连接?
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
如果没有开启的话,就到数据库的服务和连接的外围应用配置器里的远程连接中开启,主要重启数据库服务,然后再试一下
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
如果没有开启的话,就到数据库的服务和连接的外围应用配置器里的远程连接中开启,然后再试一下
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
你的数据库是否开启允许远程连接的功能?
秀小川 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 littlecommit 的回复:]

try
{
pRecordset.CreateInstance(__uuidof(Recordset));
pRecordset->Open(bstrSQL,pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}catch(_com_error e)
{
AfxMessage……
[/Quote]
试过了,还是一样的问题!
秀小川 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bxf19830819 的回复:]

确定连接成功了么?
[/Quote]
我使用telnet 192.168.1.16 1433 是没问题的!
自己机器上相同的代码也可以用!
秀小川 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 littlecommit 的回复:]

str = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data ource =192.168.1.16";

这个连接字符串里,是不是没有加上sa的密码啊?
[/Quote]
我的数据库貌似是没有密码的!
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
try
{
pRecordset.CreateInstance(__uuidof(Recordset));
pRecordset->Open(bstrSQL,pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}catch(_com_error e)
{
AfxMessageBox(e.Description());
}

你用这种方式获取记录集试试行不行?
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
1、要连接的数据库是不是在你的电脑上?
2、数据库的登录方式是不是混合验证模式即允许windows账号或sa账号登录?
峰白 2012-03-16
  • 打赏
  • 举报
回复
确定连接成功了么?
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
str = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data ource =192.168.1.16";

这个连接字符串里,是不是没有加上sa的密码啊?
秀小川 2012-03-16
  • 打赏
  • 举报
回复

try
{
pRecordset=pCommand->Execute(NULL,NULL,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
出错的就是这里!
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
呵呵!不客气!
秀小川 2012-03-16
  • 打赏
  • 举报
回复
问题搞定了。我程序里面 str = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data ource =192.168.1.16";这窜字符是从.ini文件里面读出来的,结果读的时候读了100个字符,后面的Data ource 没有读出来!!!!!! 低级错误啊! 谢谢各位了!
Ionstorm2 2012-03-16
  • 打赏
  • 举报
回复
有点乱,帮LZ理一下是不是这样的
数据库放在ip为192.168.1.16的机器上(自己的还是别人的机器?),名为Test,然后Test库里面有个表是Testtab;
用企业管理器在自己或者别人的机器上,分别用sa账户登录,select * from Testtab都有结果,没问题;
用代码执行,在自己的机器上,没有问题;在别人的机器上,显示Testtab是无效的对象名,然后如果将Initial Catalog=Test改成系统默认的比如Initial Catalog=master,然后select master下面的表是可以的??
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
如果你的连接字符串中的是Data ource的话,那可能问题出在这里了。
因为如果你不设置Data Source的话,连接应该是连接本地的数据库,如果本地没有Test数据库的话,
就会出现你说的这个问题的
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
Data ource =192.168.1.16

我刚看到你的数据库连接字符串中的这段文本,应该是Data Source = 192.168.1.16
是代码中就是这样的,还是笔误啊?
LittleCommit 2012-03-16
  • 打赏
  • 举报
回复
恩,楼上的方式可行!
加载更多回复(9)

4,017

社区成员

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

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