您的位置:首页 > 数据库

ADO 访问数据库 存取image类型字段数据 源代码

2010-07-15 22:37 627 查看
ADO类头文件代码:

#if !defined(AFX_ADO_ADO_H__9F3BD0B1_A877_4B35_9DCE_E73E49EFE0C5__INCLUDED_)
#define AFX_ADO_ADO_H__9F3BD0B1_A877_4B35_9DCE_E73E49EFE0C5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class ADO_ado
{
public:
_ConnectionPtr m_pConnection;//连接对象指针
_RecordsetPtr m_pRecordset;//记录集对象指针
public:
ADO_ado();
virtual ~ADO_ado();
void OnInitADOConn();//连接数据库
_RecordsetPtr& OpenRecordset(CString sql);//打开记录集
void CloseRecordset();//关闭记录集
void CloseConn();//关闭数据库连接
UINT GetRecordCount(_RecordsetPtr pRecordset);//获得记录数
};

#endif

ADO类函数实现文件代码:

#include "stdafx.h"
//#include "Ado.h"
#include "ADO_ado.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADO_ado::ADO_ado()
{

}

ADO_ado::~ADO_ado()
{

}
void ADO_ado::OnInitADOConn()
{
::CoInitialize(NULL);//AfxOleInit();初始化COM库
/*//"Provider=SQLOLEDB;Persist Security Info=False;UID=sa;PWD=;
//Initial Catalog=text;Data Source=LENOVO/SIMPLE;"
----- ADO连接SQL Server的数据库连接字符串模板 ----------
[1]身份验证模式为:"sql server和windows"
"Provider=SQLOLEDB.1;Persist Security Info=True;User ID=用户名;Password=密码;
Initial Catalog=数据库名;Data Source=SQL服务器名"
[2]身份验证模式为:"仅windows"
"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;
Initial Catalog=数据库名;Data Source=SQL服务器名"
"DSN=;UID=sa;PWD=;SERVER=NTSERVER;Provider=SQLOLEDB;database=text"*/
try
{
m_pConnection.CreateInstance("ADODB.Connection");//创建连接对象实例
_bstr_t strConnect="Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Password= ;Initial Catalog=DSCDTSDB;Data Source=192.168.0.125";
m_pConnection->Open(strConnect,"","",adModeUnknown);//打开数据库
}
catch(_com_error e)
{
AfxMessageBox(e.Description());//弹出错误
}
}
_RecordsetPtr& ADO_ado::OpenRecordset(CString sql)
{
ASSERT(!sql.IsEmpty());//sql语句不能为空
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例
m_pRecordset->Open(_bstr_t(sql),m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);//执行sql得到记录集
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
return m_pRecordset;//返回记录集指针
}
void ADO_ado::CloseRecordset()
{
if(m_pRecordset->GetState()==adStateOpen)//判断当前的记录集状态
m_pRecordset->Close(); //关闭记录集
}
void ADO_ado::CloseConn()
{
m_pConnection->Close();//关闭数据库连接
::CoUninitialize();//m_pConnection->Release(); //::CoUninitialize();//释放com环境
}
UINT ADO_ado::GetRecordCount(_RecordsetPtr pRecordset)
{
int nCount=0;//声明保存记录数的变量
try
{
pRecordset->MoveFirst();//将记录集指针移动到第一条记录
}
catch(...) //捕捉可能出现的错误
{
return 0;
}
if(pRecordset->adoEOF)
return 0;
while(!pRecordset->adoEOF)
{
pRecordset->MoveNext();
nCount++;
}
pRecordset->MoveFirst();
return nCount; //返回记录数
}

ado类对象定义

ADO_ado m_ADO_dscdtb;

读取数据库代码:

m_ADO_dscdtb.OnInitADOConn();
CTime tnow = CTime::GetCurrentTime();
CString strCurrDay = tnow.Format("%Y-%m-%d");
CString strSql;
strSql.Format("select * from DSCDataTB where 存储日期='%s' order by 存储时间",strCurrDay);
m_ADO_dscdtb.m_pRecordset=m_ADO_dscdtb.OpenRecordset(strSql);
//char wendushuju[5120]={0};
char *m_pBMPBuffer = NULL;
_variant_t pvList ;
long lDataSize;
while(!m_ADO_dscdtb.m_pRecordset->adoEOF)
{
CString guangxianno = (char*)(_bstr_t)m_ADO_dscdtb.m_pRecordset->GetCollect("存储时间");
lDataSize = m_ADO_dscdtb.m_pRecordset->GetFields()->GetItem(_variant_t("温度数据"))->ActualSize;
if(lDataSize>0)
{
_variant_t varBLOB;
varBLOB=m_ADO_dscdtb.m_pRecordset->GetFields()->GetItem(_variant_t("温度数据"))->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
m_pBMPBuffer = new char[lDataSize+1];
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
memcpy(m_pBMPBuffer,pBuf,lDataSize);
SafeArrayUnaccessData (varBLOB.parray);
}
}
m_ADO_dscdtb.m_pRecordset->MoveNext();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: