日前做一个用ADO技术连接数据库的小测试,程序我一步步调试了没错,数据库也连上了,也可以用记录集对象对数据库进行操作(比如说用MoveFirst),可当我想通过绑定对象来对数据库进行存取的时候就发现了一个问题:编译没错,生成exe文件后运行,我到数据库中看了看,却没有数据被改动,而我的程序是对第一条记录的数据更改,查了半天也没发现有什么问题,我想到我的程序用的是基于SQL Server 2000而因为本机上装不了所以只能换成用ODBC数据源连接Access 2000数据库,可我又想不通的是,即使不能用Access 2000的话,我怎么可能编译通过而且运行也一点错都没有呢?
下面是我的程序的主要部分:
先建一个新类CCPRs,在头文件中作如下改动:
class CCPRs : public CADORecordBinding
{
BEGIN_ADO_BINDING(CCPRs)
ADO_FIXED_LENGTH_ENTRY(1,adVarChar,m_Cstudentno,CstudentnoStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(2,adVarChar,m_Cstudentname,CstudentnameStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(3,adVarChar,m_Csex,CsexStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(4,adVarChar,m_Center_year,Center_yearStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(5,adVarChar,m_Cteacherno,CteachernoStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(6,adVarChar,m_Cborn_year,Cborn_yearStatus,TRUE)
ADO_FIXED_LENGTH_ENTRY(7,adVarChar,m_Cborn_place,Cborn_placeStatus,TRUE)
END_ADO_BINDING()
public:
CHAR* m_Cstudentno;
ULONG CstudentnoStatus;
CHAR* m_Cstudentname;
ULONG CstudentnameStatus;
CHAR* m_Csex;
ULONG CsexStatus;
CHAR* m_Center_year;
ULONG Center_yearStatus;
CHAR* m_Cteacherno;
ULONG CteachernoStatus;
CHAR* m_Cborn_year;
ULONG Cborn_yearStatus;
CHAR* m_Cborn_place;
ULONG Cborn_placeStatus;
};
然后在一对话框的初始化函数中加入以下的代码:
_RecordsetPtr pRst=NULL;
IADORecordBinding *picRs=NULL;
CCPRs rs;
CString m_strDSN=_T("MISDB");
if(pTheConn->GetState()==adStateClosed)
pTheConn->Open(m_strDSN.AllocSysString(),"","",-1);
try
{
_bstr_t strSQL="SELECT * FROM MasterInfo";
pRst.CreateInstance(__uuidof(Recordset));
pRst=pTheConn->Execute(strSQL,NULL,adCmdText);
pRst->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs);
picRs->BindToRecordset(&rs);
pRst->MoveFirst();
//pRst->MoveLast();
rs.m_Cstudentno="2002";
rs.m_Cstudentname="victor";
rs.m_Cborn_place="dangyang";
rs.m_Cborn_year="1982-04-13";
rs.m_Center_year="2002-09-01";
rs.m_Csex="man";
rs.m_Cteacherno="110";
picRs->Update(&rs);
picRs->Release();
pRst->Close();
}
其中如没有声明的变量我都一一生成了,决不可能是那方面的问题,否则就不可能通过编译了
真不明白是什么原因,为什么数据库没有发生变化呢,望哪位高手指定一二,不胜感激
[求助]数据没在数据库中显示