有一个VC++ ADO的问题

时间:2022-09-04 16:53:10
我在学习vc++
操作ADO

我的数据集类是这样的

C/C++ code

    class CCustomRs : public CADORecordBinding { BEGIN_ADO_BINDING(CCustomRs) ADO_FIXED_LENGTH_ENTRY(1,adInteger,m_lAddressID,lAddressIDStatus,FALSE) ADO_FIXED_LENGTH_ENTRY2(2,adVarChar,m_szFirstName,sizeof(m_szFirstName),lFirstNameStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(3,adVarChar,m_szLastName,sizeof(m_szLastName),lLastNameStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(4,adVarChar,m_szSpouseName,sizeof(m_szSpouseName),lSpouseNameStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(5,adVarChar,m_szAddress,sizeof(m_szAddress),lAdddressStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(6,adVarChar,m_szCity,sizeof(m_szCity),lCityStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(7,adVarChar,m_szStateOrProvince,sizeof(m_szStateOrProvince),lStateOrProvinceState,TRUE) ADO_FIXED_LENGTH_ENTRY2(8,adVarChar,m_szPostalCode,sizeof(m_szPostalCode),lPostalCodeState,TRUE) ADO_FIXED_LENGTH_ENTRY2(9,adVarChar,m_szCountry,sizeof(m_szCountry),lCountryState,TRUE) ADO_FIXED_LENGTH_ENTRY2(10,adVarChar,m_szEmailAddress,sizeof(m_szEmailAddress),lEmailAddressStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(11,adVarChar,m_szHomePhone,sizeof(m_szHomePhone),lHomePhoneStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(12,adVarChar,m_szWorkPhone,sizeof(m_szWorkPhone),lWorkPhoneStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(13,adVarChar,m_szWorkExtension,sizeof(m_szWorkExtension),lWorkExtensionStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(14,adVarChar,m_szFaxNumber,sizeof(m_szFaxNumber),lFaxNumberStatus,TRUE) ADO_FIXED_LENGTH_ENTRY(15,adDate,m_dtBirthdate,lBirthdateStatus,TRUE) ADO_FIXED_LENGTH_ENTRY(16,adBoolean,m_bSendCard,lSendCardStatus,TRUE) ADO_FIXED_LENGTH_ENTRY2(17,adVarChar,m_szNotes,sizeof(m_szNotes),lNotesStatus,TRUE) END_ADO_BINDING() public: LONG m_lAddressID; ULONG lAddressIDStatus; CHAR m_szFirstName[51]; ULONG lFirstNameStatus; CHAR m_szLastName[51]; ULONG lLastNameStatus; CHAR m_szSpouseName[51]; ULONG lSpouseNameStatus; CHAR m_szAddress[51]; ULONG lAdddressStatus; CHAR m_szCity[51]; ULONG lCityStatus; CHAR m_szStateOrProvince[51]; ULONG lStateOrProvinceState; CHAR m_szPostalCode[51]; ULONG lPostalCodeState; CHAR m_szCountry[51]; ULONG lCountryState; CHAR m_szEmailAddress[51]; ULONG lEmailAddressStatus; CHAR m_szHomePhone[51]; ULONG lHomePhoneStatus; CHAR m_szWorkPhone[51]; ULONG lWorkPhoneStatus; CHAR m_szWorkExtension[51]; ULONG lWorkExtensionStatus; CHAR m_szFaxNumber[51]; ULONG lFaxNumberStatus; DATE m_dtBirthdate; ULONG lBirthdateStatus; VARIANT_BOOL m_bSendCard; ULONG lSendCardStatus; CHAR m_szNotes[51]; ULONG lNotesStatus; CCustomRs(); virtual ~CCustomRs(); };



链接数据库的代码

C/C++ code

    BOOL CDbAdoDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) m_strConnection= _T("Driver={SQL Server};Server=127.0.0.1;" "Database=VC;Uid=sa;Pwd=enow;"); m_strCmdText=_T("select * from Addresses"); m_pRs=NULL; m_piAdoRecordBinding=NULL; ::CoInitialize(NULL); try { m_pRs.CreateInstance(__uuidof(Recordset)); m_pRs->Open(_variant_t(m_strCmdText),_variant_t(m_strConnection),adOpenDynamic,adLockOptimistic,adCmdUnknown); if(FAILED(m_pRs->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&m_piAdoRecordBinding))) _com_issue_error(E_NOINTERFACE); m_piAdoRecordBinding->BindToRecordset(&m_rsRecSet); POSITION pos=GetFirstViewPosition(); CDbAdoView* pView=(CDbAdoView*)GetNextView(pos); if(pView) { pView->RefreshBoundData(); } } catch (_com_error &e) { GenerateError(e.Error(),e.Description()); } return TRUE; }



我数据库表中有几个字段是bigint,bit,datetime类型的,其他的都是varchar(50)的
就只有bigint,bit,datetime类型的的取得出来值 varchar(50)的取不出来
m_rsRecSet这个里面的varchar(50)的字段全都是

C/C++ code

    m_szFirstName 0x0037505c "屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯"


是这样的

请问下 这是为什么,求解!

4 个解决方案

#1


ADO_VARIABLE_LENGTH_ENTRY2

#2


这个毫无疑问是,内存没有初始化的原因。
我有个ADO封装的例子,你可以扩展下,这个是我在生产环境下使用的,借你用用。
http://blog.csdn.net/zhongguoren666/article/details/6701403

#3


建议你直接使用ADO,不要使用CADORecordBinding ,后者使用过程麻烦,而且容易出错,
前者简单,明了。。。

#4


这个毫无疑问是,内存没有初始化的原因。

#1


ADO_VARIABLE_LENGTH_ENTRY2

#2


这个毫无疑问是,内存没有初始化的原因。
我有个ADO封装的例子,你可以扩展下,这个是我在生产环境下使用的,借你用用。
http://blog.csdn.net/zhongguoren666/article/details/6701403

#3


建议你直接使用ADO,不要使用CADORecordBinding ,后者使用过程麻烦,而且容易出错,
前者简单,明了。。。

#4


这个毫无疑问是,内存没有初始化的原因。