适用ADO与sql2008交互的一个例子

5 篇文章 0 订阅

在控制面板里,先配置数据源

 

这是我从小项目里截取的相关函数,注意部分代码与目的无关,只看相关代码实现即可

//连接指针和数据集指针 

_ConnectionPtr m_pConnection;
 _RecordsetPtr  m_pRecorset;

//实现代码,

void CTableListView::ReadDataSet()
{
	CListCtrl &mList=GetListCtrl();

	CoInitialize(NULL);    //初始化COM组件

	m_pConnection=_ConnectionPtr("ADODB.Connection");

	HRESULT hr;
	_bstr_t src(L"test");      //此处用之前注册的数据源的名称
	_bstr_t user(L"(local)");  //此处用local,代表本机用户
	_bstr_t pwd(L"6869");      //密码可以不用


	hr=m_pConnection.CreateInstance("ADODB.Connection");
	if (SUCCEEDED(hr))
	{
		//hr=m_pConnection->Open(src,user,pwd,adModeUnknown);
		hr=m_pConnection->Open(src,user,pwd,adConnectUnspecified);  //打开连接

		if (SUCCEEDED(hr))
		{
			::AfxMessageBox("open source success!");

			//_bstr_t mSqlStr ="select * from user";

			HRESULT  hr2=m_pRecorset.CreateInstance(__uuidof( Recordset )); 
			if (SUCCEEDED(hr2))
			{
				AfxMessageBox("connect successfully!");

				try
				{
					_bstr_t mSQlstr="select * from \"user\"";
					m_pRecorset->Open(_variant_t(mSQlstr),m_pConnection.GetInterfacePtr()
						,adOpenStatic,adLockOptimistic,adCmdText);

					//
					CString idStr,nameStr,wStr,hStr;
					_variant_t vRVariant;
					int nRow=0;
					while (!m_pRecorset->EndOfFile)
					{
						vRVariant=m_pRecorset->Fields->GetItem((long)0)->GetValue();
						idStr=(char*)(_bstr_t)vRVariant;

						vRVariant=m_pRecorset->Fields->GetItem((long)1)->GetValue();
						nameStr=(char*)(_bstr_t)vRVariant;

						vRVariant=m_pRecorset->Fields->GetItem((long)2)->GetValue();
						wStr=(char*)(_bstr_t)vRVariant;

						vRVariant=m_pRecorset->Fields->GetItem((long)3)->GetValue();
						hStr=(char*)(_bstr_t)vRVariant;

						m_pRecorset->MoveNext();

						//将读到数据显示在clistCtrl上
						mList.InsertItem(nRow,idStr);
						mList.SetItemText(nRow, 1, nameStr);//设置数据
						mList.SetItemText(nRow, 2, wStr);//设置数据
						mList.SetItemText(nRow, 3, hStr);//设置数据

						nRow++;
					}
				}
				catch (  _com_error   &e)
				{
					_bstr_t   bstrSource   (e.Source()); 
					_bstr_t   bstrDescription   (e.Description()); 
					CString   strError; 
					strError.Format( "无法执行数据连接。\r\n错误代码是:%08lx\r\n错误的原因是:%s\r\n错误源是:%s\r\n错误的描述是:%s\r\n ",   e.Error   (),   e.ErrorMessage   (),   (LPCTSTR)   bstrSource,   (LPCTSTR)   bstrDescription); 
					MessageBox   (strError,   bstrDescription,MB_OK); 
					return  ; 

				}
				catch (CFileException* e)
				{
					e->ReportError(); 
					e->Delete(); 
					return ; 
				}
				catch (CException* e)
				{
					TRACE   (   "***   无法解决的错误   *** "   ); 
					return  ; 
				}
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值