小弟是ADO新手 ,刚刚开始学习,现在想从SQL2000的一个数据库中将数据读出来放入数组 modules中去,但是不知道怎么放。请大家帮帮我。谢谢
#include "stdafx.h"
#include "pullon.h"//建立一个数组
struct Modules{
char ipaddress[16];
char name[16];
char deviceid[];
} modModule[255];
// 初始化—连接数据库
void pullon::OnInitpullon()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
// 创建Connection对象
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");
m_pcon->Open("Drive={SQLServer};server=127.0.0.1;database=ip;uid=sa;pwd=sa","","",adModeUnknown); // 捕捉异常
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
} }// 执行查询
_RecordsetPtr& pullon::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitpullon();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open("select * from csql",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
// 返回记录集
return m_pRecordset;
}void pullon::Onreadsql()
{ _variant_t var;
CString strName,strIP,strwModule;
//m_pRecordset->BOF判断是否 在第一条记录前面
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
} // 读入库中各字段
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("模块名称");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块Ip");
if(var.vt != VT_NULL)
strip = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块型号");
if(var.vt != VT_NULL)
strwModule = (LPCSTR)_bstr_t(var);
//将sql读到的数据存入数组中去
strName=Moulds.name }
}
// 捕捉异常
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}}
{ var = m_pRecordset->GetCollect("模块名称");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块Ip");
if(var.vt != VT_NULL)
strip = (LPCSTR)_bstr_t(var); //将sql读到的数据存入数组中去
//strName=Moulds.name // 这里搞反了Moulds[i].name = strName;// 一个记录读取完后,需要向下移动指针,同时数组下标加1
m_pRecordset->MoveNext();
i++;}
modules = new Modules[]; //维数多大你自己确定吧int i = 0;
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("模块名称");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块Ip");
if(var.vt != VT_NULL)
strip = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块型号");
if(var.vt != VT_NULL)
strwModule = (LPCSTR)_bstr_t(var);
//将sql读到的数据存入数组中去
modules[i].name = strName;
modules[i].ip = strip;
m_pRecordset->MoveNext();
i++;
}
struct Modules{
char ipaddress[16];
char name[16];
char deviceid[];
} modModule[255]; // 中间略....// 数据量不能超过当前 modModule 的大小 ( 255)
int nRecord = 0;
// 读入库中各字段
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("模块名称");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块Ip");
if(var.vt != VT_NULL)
strip = (LPCSTR)_bstr_t(var);
var = m_pRecordset->GetCollect("模块型号");
if(var.vt != VT_NULL)
strwModule = (LPCSTR)_bstr_t(var);
//将sql读到的数据存入数组中去
// strName=Moulds.name
if (nRecord < 256)
{
strcpy(modModule[i].ipaddress, strName.GetBuffer());
strcpy(modModule[i].name, strip.GetBuffer());
strcpy(modModule[i].deviceid, strwModule.GetBuffer());
strName.ReleaseBuffer();
strip.ReleaseBuffer();
strwModule.ReleaseBuffer();
}
nRecord++;
}
// 以下略 ...