wince mysql吗_WinCE自带数据库系统操作笔记

WinCE自带数据库系统最多只能支持4种排序,这比不是上PC下的SQL等数据库相比功能,但对于嵌入式设备来说已经足够了。

数据库卷是可以存储CE数据库的特殊格式的文件。

把数据库存储在文件中,就要用数据库卷,先打开或者新建数据库卷,关闭数据库后,还要卸载数据库卷

先装配(打开或新建)数据库卷

CEGUID m_ceGuid;//存储数据库文件卷标识(GUID)PCEGUID m_pCeGuid;

const LPTSTR  DBFILENAME = _T("\\My Documents\\abc.db");//数据库文件名

//挂载数据库卷,OPEN_ALWAYS表示如果存在则打开,不存在,就新建一个数据库卷

if (!CeMountDBVol(&m_ceGuid,DBFILENAME,OPEN_ALWAYS))

{

AfxMessageBox(_T("打开或新建数据卷失败"));

return  FALSE;

}

//了解系统中已装配好的数据库卷的信息

TCHAR szVolumeName[128];

CREATE_INVALIDGUID(&m_ceGuid);//首次使用时用该宏将&m_ceGuid设为无效。

while(CeEnumDBVolumes(&m_ceGuid,szVolumeName,sizeof(szVolumeName)))

{

AfxMessageBox(szVolumeName);

}

创建数据库

CeCreateDatabase()函数只能创建存放在对象存储库中的数据库

CeCreateDatabaseEx()函数除有以上函数功能外,可以创建存放在数据库卷中的数据库

const LPTSTR  DBTABLENAME = _T("Student");//定义数据库名

CEOID  m_ceOid;   //DWORD型  存储数据库对象标识和记录对象标识,惟一标识数据库的ID,CeCreateDatabaseEx()返回

//在对象存储库外创建一个数据库

CEDBASEINFO ceDbInfo;//用来描述被创建的数据库名称、类型、排序方式以及数据库特征等信息

ceDbInfo.dwFlags = CEDB_VALIDNAME | CEDB_VALIDTYPE | CEDB_VALIDSORTSPEC ;

wcscpy(ceDbInfo.szDbaseName , DBTABLENAME);

ceDbInfo.dwDbaseType = 0;

ceDbInfo.wNumSortOrder = 2 ; //排序字段数目

ceDbInfo.rgSortSpecs[0].propid = PID_NO;

ceDbInfo.rgSortSpecs[0].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关

ceDbInfo.rgSortSpecs[1].propid = PID_NAME;

ceDbInfo.rgSortSpecs[1].dwFlags = CEDB_SORT_CASEINSENSITIVE; //升序,且大小写无关

m_ceOid = CeCreateDatabaseEx(&m_ceGuid,&ceDbInfo);

if (m_ceOid == 0)//判断创建是否成功

{

AfxMessageBox(_T("创建数据库失败"));

//此处得卸载数据库卷

if (!CeUnmountDBVol(&m_ceGuid))

{

AfxMessageBox(_T("卸载数据库文件卷失败"));

}

return ;

}

打开数据库

CeOpenDatabase()函数用于打开对象存储库中的数据库

CeOpenDatabaseEx()函数用于打开存储在数据库卷中的数据库

HANDLE m_hDB;//存储数据库句柄,CeOpenDatabaseEx()返回

const LPTSTR  DBTABLENAME = _T("Student");//定义数据库名

m_hDB = CeOpenDatabaseEx(&m_ceGuid,&m_ceOid,DBTABLENAME,NULL,CEDB_AUTOINCREMENT,NULL);

if (m_hDB == INVALID_HANDLE_VALUE)//打开失败寻找原因

{

//如果数据库不存在,则新建

if (GetLastError() == ERROR_FILE_NOT_FOUND)

{新建数据库}

新建数据库后接着要打开数据库;

打开失败则卸载数据库卷,并返回;

}

else

{

打开失败则卸载数据库卷,并返回;

}

查找或移动记录

添加记录(写记录)

tmpCeOid = CeWriteRecordProps(m_hDB,0,4,pProps);

CEOID tmpCeOid; //表中记录对象标识

CEPROPVAL *pProps;

pProps = new CEPROPVAL[4];

//学号

//定义学生学号字段标识

//#define PID_NOMAKELONG(CEVT_LPWSTR,1)//CEVT_LPWSTR为字段数据类型

//#define MAKELONG(a, b)      ((LONG)( ((WORD)(a)) | ( (DWORD)((WORD)(b)) ) << 16 ))

memset(pProps,0,LocalSize(pProps));

pProps->propid = PID_NO; //字段标识

pProps->val.lpwstr = stu.szNo;//0结构的Unicode字符串,根据字段的类型选用相应赋值

//姓名

pProps++;

memset(pProps,0,LocalSize(pProps));

pProps->propid = PID_NAME ;

pProps->val.lpwstr = stu.szName;

//日期

pProps++;

memset(pProps,0,LocalSize(pProps));

pProps->propid = PID_BIRTHDAY;

pProps->val.filetime  = stu.ftBirthday;

//学生身高

pProps++;

memset(pProps,0,LocalSize(pProps));

pProps->propid = PID_STATURE;

pProps->val.iVal = stu.iStature;

pProps = pProps -3 ;

//写记录函数,第二个参数为写入记录标识,0表示添加一条新记录

//第三个参数表写入字段个数和pProps数组长度

tmpCeOid = CeWriteRecordProps(m_hDB,0,4,pProps);

if (tmpCeOid == 0)

{

return false;

}

return true;

}

关闭数据库

//1、关闭数据库

if (!CloseHandle(m_hDB)

{

AfxMessageBox(_T("关闭数据库失败"));

return;

}

//2、将数据库卷的数据缓冲到永久存储介质上

if (!CeFlushDBVol(&m_ceGuid))

{

AfxMessageBox(_T("缓冲介质失败"));

return ;

}

//3、卸载数据库卷

if (!CeUnmountDBVol(&m_ceGuid))

{

AfxMessageBox(_T("卸载数据库文件卷失败"));

return ;

}

删除数据库

CeDeleteDatabase(m_ceOid);//删除对象库中的数据库

CeDeleteDatabaseEx(&m_ceGuid,m_ceOid);//删除数据库卷中的数据库

列举数据库,获得其信息

hEnumDB=CeFindFirstDatabaseEx(pceguid,0);

CeOid=CeFinfNextDatabaseEx(hEnumDB,pceguid);

TCHAR szMsg[100];//错误信息

HANDLE hEnumDB;  //列举数据库句柄

CEOID CeOid;//数据库对象标识

PCEGUID pceguid = NULL;//数据库卷标识

CEOIDINFO CeObjectInfo;//数据库对象基本信息

//列举(查找)所有数据库卷及数据库卷中的所有数据库

hEnumDB=CeFindFirstDatabaseEx(pceguid,0);

if (hEnumDB == INVALID_HANDLE_VALUE)//列举失败

{if(GetLastError()==ERROR_OUTOFMEMORY)

{wsprintf(szMsg,TEXT("OUT OF MEMORY."));}

return;

}

while((CeOid=CeFinfNextDatabaseEx(hEnumDB,pceguid))!=0)

{ //得到数据库信息

if(!CeOidGetInfoEx(pceguid,CeOid,&CeObjectInfo))

{    //获取信息失败

CloseHandle(hEnumDB);//关闭查找句柄

return;

}

else{wsprintf(szMsg,TEXT("The name of the database is: %s"),CeObjectInfo.infDatabase.szDbaseName);}

}

int  iCount = oidinfo.infDatabase.wNumRecords;//获取数据库的记录数目

CloseHandle(hEnumDB);//关闭查找句柄

posted on

2008-02-20 16:45

zrs

阅读(1676)

评论(0)

编辑

收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值