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

vc控制台程序能用ADO连接数据库么?或者有什么别的方法。
RT
我用SQL提供的API做了,但是本机还可以,局域网内就很慢了。网上还有说这种做法不是很安全。希望大家多多交流啊!
谢谢!!!

------解决方案--------------------
当然能用.
ADO是com组件,使用前CoInitialize,结束时CoUninitialize
------解决方案--------------------
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()