求教一些ADO连接SQL SERVER2008的基本问题?

南安风语者 2013-03-18 05:40:45
我用ADO连接了SQL SERVER2008并且创建和打开了记录集去读一些表,主要代码如下
1. BOOL ADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境
if( !m_bCoInitialize)
{
if( S_OK!= ::CoInitialize(NULL))
{
AfxMessageBox(_T("初始化COM库错误!"));
}
}

try
{
// 创建Connection对象
HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr))
{
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=SQLOLEDB; Server=(local); Database=001; Integrated Security=SSPI; uid=test; pwd=12345;";

hr = m_pConnection->Open(strConnect,"","",adModeUnknown);
if( SUCCEEDED( hr))
{
return true;
}
}
else
{
AfxMessageBox(_T("创建Connection对象失败!"));
}
}
catch(_com_error e) // 捕捉异常
{
// 显示错误信息
AfxMessageBox(e.Description());
}

return false;
}

2. int ADOConn::GetVehicleNum()
{
int nRet = 0;

int nInto = 0;
int nOut = 0;

if( NULL != m_pConnection)
{
// 创建车辆入场记录集对象
if( NULL == m_pRecordsetInto)
{
m_pRecordsetInto.CreateInstance(__uuidof(Recordset));
}

HRESULT hr = m_pRecordsetInto->Open(_T("SELECT IC卡号码 FROM 车辆入场"), _variant_t((IDispatch *)m_pConnection, true),
adOpenStatic, adLockReadOnly, adCmdText);
if( SUCCEEDED( hr))
{
// 得到车辆入场记录条数
nInto = m_pRecordsetInto->RecordCount;
}

// 创建车辆出场记录集对象
if( NULL == m_pRecordsetOut)
{
m_pRecordsetOut.CreateInstance(__uuidof(Recordset));
}

hr = m_pRecordsetOut->Open(_T("SELECT IC卡号码 FROM 车辆出场"), _variant_t((IDispatch *)m_pConnection, true),
adOpenStatic, adLockReadOnly, adCmdText);
if( SUCCEEDED( hr))
{
// 得到车辆出场记录条数
nOut = m_pRecordsetOut->RecordCount;
}
}

nRet = nInto - nOut;

return nRet;
}

连接数据库和取得表中的记录是成功的,我的问题如下
1. 我这样连接数据库和表后,其他程序还可以去连接并且对数据库和表进行操作不
2. 如果不影响其他程序对数据库和表进行操作,表被更新后,我要怎么样去更新记录集
如: m_pRecordsetInto我已经open过了, 需要在重新open一次吗
3. 如果我的连接会影响其他程序对数据库的操作,要怎么样做才不会影响到其他程序都数据库的操作

问这么多问题,其实我最根本的目的就是,我想在不影响其他程序对数据库的操作,每30秒钟去读取数据库里的表的内容, 请大家指教一下,我现在刚用数据库
...全文
213 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
南安风语者 2013-03-28
  • 打赏
  • 举报
回复
南安风语者 2013-03-26
  • 打赏
  • 举报
回复
如果SQL SERVER用的是混合登录,上面的 _bstr_t strConnect应该怎么写呢
雨陽 2013-03-26
  • 打赏
  • 举报
回复
不好意思,我的积分不够发贴的,所以来借楼主的帖子问个问题 如何更新WinXp x64的ADO控件版本? 我在Win7 x64上开发的VC程序,用的ADO6.1版本连接sql,要在 WinXP x64上使用,但是xp64上的ADO只有2.8版本,这个要怎么解决啊,可不可以升级xp64上的ADO版本? 现在我开发完的程序在xp64机器上报一个错误,弹出一个错误框,但是里面什么信息也没有,是个空白,我调试过,是遇到了__uuidof 或 _bstr_t 语句时会弹同这个错误,请大侠指教
贪玩的老鼠 2013-03-20
  • 打赏
  • 举报
回复
m_pRecordsetInto->Open的第四个参数 adLockReadOnly 1 以只读方式启动,无法运行 AddNew、Update、Delete 等方法,缺省值 adLockPessimistic 2 当数据正在更新时,系统会暂时锁定其它用户的动作,以确保数据一致性 adLockOptimistic 3 当数据正在更新时,系统不会暂时锁定其它用户的动作 adLockBatchOptimistic 4 当数据正在更新时,其它用户必须将 CursorLocation 属性设为 adUseBatch ,才能对数据库操作 1. 我这样连接数据库和表后,其他程序还可以去连接并且对数据库和表进行操作不 别的程序是可以读的 2. 如果不影响其他程序对数据库和表进行操作,表被更新后,我要怎么样去更新记录集 //重新查询Requery 看你的要求只是查询数据库,不会影响的其它程序(不过你没30秒去查数据库,如果表数据很多的话,会影响数据库服务器)
zyq5945 2013-03-20
  • 打赏
  • 举报
回复
记错了,是Requery,效率的话不知道了,自己测试下。
南安风语者 2013-03-20
  • 打赏
  • 举报
回复
refresh怎么再刷新下呀, _RecordsetPtr没有这个方法呀, 可以说的详细一些不 它的效率应该不再Open一次更快吧
zyq5945 2013-03-19
  • 打赏
  • 举报
回复
2.需要close后才能在调用open 3.网上搜下"SQL SERVER 事务"就出来了,不过有时间的话最好找本书来看会好一些。
南安风语者 2013-03-18
  • 打赏
  • 举报
回复
谢谢, 第2点, 如果再用open打开的话,是不是之前要close呀 第3点 怎么用事务来保证呀,可以说的详细一点不
zyq5945 2013-03-18
  • 打赏
  • 举报
回复
1.可以的 2.用Open打开一次,或者用refresh再刷新下。 3.同时修改一条记录的话会有冲突,但可以用事务来保证, 同时读的话没有关系。

4,011

社区成员

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

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