VC++与SQL数据库连接

郁闷了一天了!开始是XP系统,实在是装不上SQL2000,装上了用不了。实在太郁闷了,最后换了系统了!装了2000,顺利安装成功SQL2000,高兴啊!突然发现没有显卡驱动,声卡驱动,郁闷,爬网驱动之家搜索,一切安装好了。按照书上给的也没有什么改变,继续连接数据库。晕倒,怎么也不正确啊!后来才发现原来书上有错误!

以下是正确的连接方法:

///类ADOConn负责连接SQL数据库:(VC++SQL SERVER数据库应用系统开发与实例提供!)

#import "c:/Program Files/common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")

class ADOConn 
{
public:
 _ConnectionPtr m_pConnection;
 _RecordsetPtr m_pRecordset;
public:
 ADOConn();
 virtual ~ADOConn();
 void OnInitADOConn();
 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
 BOOL ExecuteSQL(_bstr_t bstrSQL);
 void ExitConnection();
};


#include "stdafx.h"
#include "numcontrol.h"
#include "ADOConn.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}
void ADOConn::OnInitADOConn()
{
 ::CoInitialize(NULL);
 try
 {
 
 m_pConnection.CreateInstance(_uuidof(Connection));
 _bstr_t strConnect="Provider=SQLOLEDB;Server=ntServer;Database=NumData;uid=sa;pwd=sa;";
   m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
 catch(_com_error e)
 {
  m_pConnection=NULL;
  AfxMessageBox(e.Description());
 }
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
 try
 {
  if(m_pConnection==NULL)
  {
   OnInitADOConn();
  }
  m_pRecordset.CreateInstance(_uuidof(Recordset));
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.Description());
 }
 return m_pRecordset;
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
 try
 {
  if(m_pConnection==NULL)
  {
   OnInitADOConn();
  }
  m_pConnection->Execute(bstrSQL,NULL,adCmdText);
  return true;
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.Description());
  return false;
 }
}
void ADOConn::ExitConnection()
{
 if(m_pRecordset!=NULL)
 {
  m_pRecordset->Close();
 }
 m_pConnection->Close();
 ::CoUninitialize();
}

 下面的代码是在一个FormView中的ComboBox中添加了数据库中的一列的内容!

void CNumSet1::OnInitialUpdate()
{
 CFormView::OnInitialUpdate();
 //AfxOleInit();
 ADOConn m_adoConn;
 m_adoConn.OnInitADOConn();
 _bstr_t vSQL;
 vSQL="SELECT MachineName FROM Machine";
 _RecordsetPtr m_rs;
 m_rs=m_adoConn.GetRecordSet(vSQL);
 if(m_rs->adoEOF)
 {  
  m_adoConn.ExitConnection();
  MessageBox("机床库中没有数据!");
  return ;
 }
 else
 {
  while(!m_rs->adoEOF)
  {
   ((CComboBox*)GetDlgItem(IDC_MACHINE))->AddString((LPCTSTR)(_bstr_t)m_rs->GetCollect("MachineName"));
      m_rs->MoveNext();
  }
 }
 m_adoConn.ExitConnection();
 // TODO: Add your specialized code here and/or call the base class
 
}

加粗的那句话,在上面的那本书中居然给了一个错误的句子:while(m_rs->adoEOF!=1),真的让人没有办法说啊!就是这么一句话,如果你没有去Go to definition一下,都不能相信啊!应该是while(m_rs->adoEOF!=-1)

那为什么就不写成while(!m_rs->adoEOF),这样也清楚啊!真让人想不明白啊!

我真的不清楚到底是谁的原因,对于一个初学者来说,这书的参考价值就值得商榷了!!!!

转载于:https://www.cnblogs.com/jh0262/archive/2006/12/06/2946861.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值