vc控制台程序能用ADO连接数据库么?或者有什么别的方法。

wantaozhang 2007-03-05 11:14:34
RT
我用SQL提供的API做了,但是本机还可以,局域网内就很慢了。网上还有说这种做法不是很安全。希望大家多多交流啊!
谢谢!!!
...全文
415 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2007-03-06
  • 打赏
  • 举报
回复
ADO的例子很多
mick110 2007-03-06
  • 打赏
  • 举报
回复
1、#import "msado15.dll" no_namespace rename("EOF","ADOEOF")
引入"msado15.dll"动态库。

2、定义一个变量 _ConnectionPtr m_AdoCon;代表一个代表与数据源进行的唯一会话

3、打开数据库
_bstr_t connString; //连接字符串

try
{
connString = _T("Provider=MSDASQL.1;Data Source=kong;Persist Security Info=False");

m_AdoCon.CreateInstance(__uuidof(Connection));//???

m_AdoCon->Open(connString, "", "", -1);
}
catch (_com_error& comerr)
{
IErrorInfo* pErrorInfo = comerr.ErrorInfo();
HRESULT hr = comerr.Error();

if (pErrorInfo)
{
BSTR bsDesc = NULL;

pErrorInfo->GetDescription( &bsDesc );
_bstr_t sDesc( bsDesc, false );

AfxMessageBox(sDesc.operator LPCTSTR());

pErrorInfo->Release();
}
}

4、使用
CString strIp, SQL_STR, strTemp, strResult;

UINT port;

_RecordsetPtr AdoRst; //RecordSet的实例
_StreamPtr AdoStream; //Ado数据流

SQL_STR = m_strText; //SQL语句

if (m_AdoCon->State == adStateClosed) //判断连接是否已经关闭
{
strTemp = "Ado connection hasn't set up.";
m_pWnd->SendMessage(WM_FRESHWATCHLIST, (WPARAM)(&strTemp));

SendMsg(strTemp, FALSE);

return;
}

try
{
//Create Recordset Interface
AdoRst.CreateInstance(__uuidof(Recordset));

AdoRst->Open((LPCTSTR)SQL_STR, m_AdoCon.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdUnknown); //打开并且执行SQL(SQL_STR)语句

if (strTemp != "SELECT")
strResult =_T("OK!");
else
{
//Save the xmlResult to strResult
AdoStream.CreateInstance(__uuidof(Stream)); //

AdoRst->Save(AdoStream.GetInterfacePtr(), adPersistXML);
strResult = ((BSTR)AdoStream->ReadText(adReadAll)); //转换为XML格式
}
}
catch (_com_error& comerr)
{
//catch the COM exception
IErrorInfo* pErrorInfo = comerr.ErrorInfo();
HRESULT hr = comerr.Error();

if (pErrorInfo)
{
BSTR bsDesc = NULL;
pErrorInfo->GetDescription( &bsDesc );
_bstr_t sDesc( bsDesc, false);

strResult = sDesc.operator LPCTSTR();
pErrorInfo->Release();
}
}


5.取得表中的字段 GetCollect()
int nItem;
_variant_t vUsername,vBirthday,vID,vOld;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
m_bSuccess = TRUE;
while(!m_pRecordset->adoEOF)
{
vID = m_pRecordset->GetCollect("ID");
vUsername = m_pRecordset->GetCollect("username");
vOld = m_pRecordset->GetCollect("old");
vBirthday = m_pRecordset->GetCollect("birthday");
nItem=m_userlist.InsertItem(0xffff,(_bstr_t)vID);
m_userlist.SetItem(nItem,1,1,(_bstr_t)vUsername,NULL,0,0,0);
m_userlist.SetItem(nItem,2,1,(_bstr_t)vOld,NULL,0,0,0);
m_userlist.SetItem(nItem,3,1,(_bstr_t)vBirthday,NULL,0,0,0);

m_pRecordset->MoveNext();
}
}

6.添加数据 PutCollect()
if(!m_pRecordset->adoEOF && m_nCurrentSel >= 0 && m_bAutoSave)
{
vUserID = (long)m_nUserID;
vUsername = m_sUsername;
vOld = (long)m_nOld;
vBirthday = m_tBirthday;
m_pRecordset->PutCollect("ID",vUserID);
m_pRecordset->PutCollect("username",vUsername);
m_pRecordset->PutCollect("old",vOld);
m_pRecordset->PutCollect("birthday",vBirthday)
}
ouyh12345 2007-03-05
  • 打赏
  • 举报
回复
当然能用.
ADO是com组件,使用前CoInitialize,结束时CoUninitialize
wantaozhang 2007-03-05
  • 打赏
  • 举报
回复
有人有连接SQL的例程吗?

4,017

社区成员

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

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