APP下载

C语言在数据库管理中的应用

2011-08-30

科技传播 2011年17期
关键词:空闲字节数据库

张 波

睢宁县供电公司,江苏徐州 221215

数据库系统,是由数据库及其管理软件组成的系统。数据库技术作为一种利用计算机处理能力进行辅助管理数据的方法,其主要的工作范围就是研究如何组织和存储数据,如何高效地获取和处理数据。并且通过研究和分析数据库的结构、数据的存储、数据库管理以及应用的基本理论和实现方法以此来实现对数据库中的数据进行处理、分析和理解。现如今多数事务处理系统都是在数据库系统环境下使用数据库语言例如dBASE,Foxbase, Foxpro,C#等。c#是2006年微软公司发布的一种新的编程语言。c#语言定义主要是从C和C++继承而来的且是多种语言的混合体,因此它像Java一样语法简洁,像VB6一样使用简单,像C++一样功能强大和灵活。.NET 3.5为C#编程语言增加了实用支持强类型的查询,可用于和各种形式的数据进行交互。我们使用数据库语言为事务管理系统建库,然后用C#语言实现对数据库的管理。本文以用C#语言处理一数据文件为例,说明C#语言在数据库中的应用。

1 数据库文件的存储格式

用C#语言管理数据库,主要的工作就是用C#语言直接读取数据库文件中的数据。这里以SQLite数据库文件为例,介绍数据库文件的结构.SQLite有3类数据库。除内存数据库外,SQLite把每个数据库(main或temp)都存储到一个单独的文件中。SQLite数据库文件由固定大小的“页(page)”组成。页的大小可以在512到32768的2的指数,默认大小为1KB。页大小可以在数据库刚刚创建时设置,一旦创建了数据库对象之后,这个值就不能再改变了。

数据库中所有的页从1开始顺序编号。在具体的实现中,页号用4字节来表示。文件的第1个页被称为page 1,第2个页被称为page 2,依此类推。编号为0的页表示“无此页”。

页的类型可以是:Btree页、空闲页或溢出页。一个数据库文件中可能没有空闲页或溢出页,但必然有Btree页。库中第一个页(page 1)永远是Btree页。Page 1的前100个字节是一个对数据库文件进行描述的“文件头”。它包括数据库的版本、格式的版本、页大小、编码等所有创建数据库时设置的永久性参数。关于这个特殊文件头的文档在btreeInt.h中,具体格式如下:

偏移量 大小 说明0 16 头字符串,如果不改源程序,此字符串永远是"SQLite format 3"。16 2 页大小(以字节为单位)。18 1文件格式版本(写)。对于SQLite的当前版本,此值为1。如果该值大于1,表示文件为只读。SQLite将来版本对此域的规定可能改变。19 1文件格式版本(读)。对于SQLite的当前版本,此值为1。如果该值大于1,SQLite认为文件格式错,拒绝打开此文件。SQLite将来版本对此域的规定可能改变。20 1 每页尾部保留空间的大小。(默认为0)

从偏移22开始的字节元数据变量在btreeInt.h中的定义在此不加描述。

用UltraEdit打 开 文 件foods_test.db,page 1在0X0000~0X03FF。其中文件头内容如下(深蓝色部分):

前16个字节为头字符串,程序中固定设为”SQLite format 3”。

0X0400 :页大小,0X0400=1024字节。

0X01:文件格式版本(写),值为1。

0X01:文件格式版本(读),值为1。

0X40:Btree内部页中一个单元最多能够使用的空间。0X40=64,即25%。

0X20:Btree内部页中一个单元使用空间的最小值。0X20=32,即12.5%。

0X20:Btree叶子页中一个单元使用空间的最小值。0X20=32,即12.5%。

0X00000003 :文件修改计数,现在已经修改了3次,分别是1次创建和两次插入。

从0X20开始的4个字节:空闲页链表首指针。当前值为0,表示该链表为空。

从0X24开始的4个字节:文件内空闲页的数量。当前值为0。

从0X28开始的4个字节:Schema version。当前值为0X00000001。以后,每次sqlite_master表被修改时,此值+1。

从0X38开始的4个字节:采用的字符编码。此处为0X00000001,表示采用的是UTF-8编码。在SQLite文件中,所有的整数都采用大端格式,即高位字节在前。

2 程序代码及简要说明

//通过DataSet来读取数据:

//创建和数据库的连接

OracleConnection oraCon=new OracleConnection(“user id=112;data source=wmatech;password=414”);

//新建一个DataAdapter用于填充DataSet

OracleDataAdapter oraDap=new OracleDataAdapter(“select *from actor”,oraCon);

DataSet ds=new DataSet();

//填充DataSet

oraDap.Fill(ds);

DataTable _table=ds.Tables[0];

//查看表中数据的列数

int count=_table.Rows.Count;

DataGrid1.DataSource=_table;

DataGrid1.DataBind();

//通过DataReader来读取数据:

OracleConnection oraCon=new OracleConnection(“user id=112;data source=wmatech;password=414”);

//新建一个对数据库操作的实例

OracleCommand oraCmd=new

OracleCommand(“select * from actor”,oraCon);

oraCon.Open();

OracleDataReader oraRD= oraCmd.ExecuteReader();

string szHtml=””;

while (oraRD.Read())

{

szHtml+=oraRD[0].ToString()+”  ;

“+oraRD[1].ToString()+” ;

“+oraRD[2].ToString()+”
”;

}

oraRD.Close();

3 结论

使用C#语言进行数据库操作可方便快捷的进行数据的读取,效率很高。利用本文介绍的方法可对数据库进行多种形式的管理,例如实现对数据库文件的压缩、展开,显示数据库结构,输出记录等操作,这有利于提高程序的可移植性。

猜你喜欢

空闲字节数据库
恩赐
No.8 字节跳动将推出独立出口电商APP
“鸟”字谜
No.10 “字节跳动手机”要来了?
彪悍的“宠”生,不需要解释
简谈MC7字节码
数据库
数据库
WLAN和LTE交通规则
数据库