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();
}
#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();
}
相关文章推荐
- 数据库中Image类型的数据的存取(For C#/ASP.NET)
- 数据库中Image类型的数据的存取(For C#/ASP.NET)
- ADO对象——获取数据库字段的数据类型
- Flex存取数据库Image类型数据-Java后台
- ADO对象——获取数据库字段的数据类型 .
- ADO.NET中取得数据库字段的数据类型
- 数据库中字段类型对应的C#中的数据类型
- 2009-12-01 15:10 SQL SERVER 2008数据库的表中修改字段的数据类型后,不能保存
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- 查询数据库中的表,返回字段相对应的数据类型!
- c#向数据库中插入xml数据类型的字段
- ADO.NET数据访问方式:强类型DataSet
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- 【数据库】SQL Server中的Image数据类型的操作
- 更新数据库所有表的某一个指定字段 ,附加对‘将 varchar 值转换为数据类型为 int 的列时发生语法错误’处理方法
- 数据库-获取表中该字段的数据类型
- 存取显示Image类型的字段
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- JDBC数据类型与数据库字段对应表——mysql篇
- ASP.NET存取Sql Server数据库Image字段数据