
1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:
#include <WinSock2.h>// 进行网络编程需要winsock2.h
#include <mysql.h>
#pragma comment(lib, “libmysql.lib”)
2、创建MYSQL变量。如:
MYSQL mysql
3、初始化MYSQL变量。
mysql_init(&mysql)
4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag)
参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。
5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length)
参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。
查询成功则该函数返回0。
6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。
两个函数的原型分别为:
MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql)
MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql)
这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。
7、调用mysql_fetch_row函数读取结果集数据。
上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result)
参数result就是mysql_store_result或mysql_use_result的返回值。
该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。
8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:
void STDCALL mysql_free_result(MYSQL_RES *result)
9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:
void STDCALL mysql_close(MYSQL *sock)
一、 HDF文件格式1.概述
HDF 是美国国家高级计算应用中心(National Center for Supercomputing Application)为了满足各种领域研究需求而研制的一种能高效存储和分发科学数据的新型数据格式。一个HDF文件中可以包含多种类型的数据,如栅格图像数据,科学数据集,信息说明数据。这种数据结构,方便了我们对于信息的提取。例如,当我们打开一个HDF图像文件时,除了可以读取图像信息以外,还可以很容易的查取其地理定位,轨道参数,图像噪声等各种信息参数。HDF 的数据结构是一种分层式数据管理结构。
2.HDF数据结构特点
HDF是一个能够自我描述、多目标、用于科学数据存储和分发的数据格式。它针对存储和分发科学数据的各种要求提供解决方法。HDF设计特点为:
· 自我描述:一个HDF文件中可以包含关于该数据的全面信息。
· 多样性:一个HDF文件中可以包含多种类型的数据。例如,可以通过利用适当的HDF 文件结构,在某个HDF文件中存储符号、数值和图形数据。
· 灵活性:可以让用户把相关数据目标集中一个HDF文件的某个分层结构中,并对其加以描述。同时可以给数据目标记上标记,方便查取。用户也可以把科学数据存储到多个HDF文件中。
· 可扩展性:在HDF中可以加入新数据模式,增强了它与其它标准格式的兼容性。
· 独立性:HDF是一种同平台无关的格式。HDF文件在不同平台间传递而不用转换格式。
3.为什么建立HDF
人们通常在不同机器上建立、处理数据。在处理过程中,除了原始数据信息以外,无疑会产生大量的结果、辅助、说明等信息,这些信息由于具有不同的格式,所以往往被存于不同的文件中。这样,在数据共享过程中,我们不得不利用各种软件将其打包,进行传输。即便如此,也难免会出现遗漏或出错现象,造成了许多不必要的麻烦。HDF通过提供“总体目录结构”来处理这类问题:
·为程序提供一种机制,使它能够直接从嵌套的文件中获得信息。
·可以将不同类型的数据源存于同一个文件中,而这些数据源又可以同时包含其数据信息和和其它相关信息。
·对常用数据集的格式和描述标准化。
·鼓励所有机器和程序使用标准数据格式,产生包括具体数据的文件。
4.HDF数据类型
HDF有6种主要数据类型:栅格图象,调色板,科学数据库,注释,Vdata和Vgroup。
· 栅格图象: 数据模式提供一种灵活方式存储、描述栅格图象数据,包括8bit栅格图象。
· 调色板: 也叫作彩色查对表,它提供图像的色谱。
· 科学数据集: 用来存储和描述多维科学数据陈列。
· Vdata: 是一个框架,用于存储和描述数据表。
· HDF注释: 是文字串,用来描述HDF文件或HDF数据目标。
· Vgroup: 是用来把相关数据目标联系起来。一个Vgroup可以含有其它Vgroup,以及数据目标。任一个HDF目标均可以包括进某个Vgroup中。
5.HDF文件格式
HDF格式可以被看成一本带目录的多章节书。HDF文件作为“数据书”,每一章包含不同类型的数据元素。HDF文件用“数据目录”列出数据元素。
一个HDF 文件应包括一个文件头,一个或多个描述符块,若干个数据元素。
数据头是用来确定一个文件是否为HDF文件,描述符块存有数据描述符的序号。一个数据描述符和数据元素一起组成了数据对象。数据对象是HDF 的基本结构。
1)文件头
文件头占用文件的前4个字节,它由4个ASCII码形式的控制字符组成,每个字符占用一个字节。第一个控制字符是‘N’,第二个是‘C’, 第三个是‘S’,第四为‘A’,即(^N^C^S^A).
2) 数据对象
一个数据对象是由一个数据描述符和一个数据元素组成。数据描述符包含了数据元素的类型、位置、尺度等信息。数据元素是实际的数据资料。HDF 这种数据组织方式可以实现HDF 数据的自我描述。
(1) 数据描述符
所有的数据描述符都为12个字节长,它包含4个区域:标识符(占16-bit),参照数(16-bit),数据偏移量(32-bit),数据长度(32-bit)。
标识符:
数据标识符(tag)是用来确定数据元素区数据类型的。它是16位无符号整型值(1~65535),如果没有与其相对应的数据元素,则tag为DFTGA_NULL(或0)。下面为tag的值的说明:
1~32767——HDF 结构专用
32768~64999——可由用户定义
65000~65535——HDF 规格扩展使用
参照数:
对于HDF 文件中的每个标记符,都有唯一的一个参照数与其相对应。参照数是一个16—bit无符号整型数,在数据对象中一般是不可变的。标记符和参照数相结合确定唯一的数据对象。
数据偏移量和长度:
数据偏移量是指从文件开始位置到数据元素的起始位置所包含的字节数。长度是指整个数据元素区占用字节数。数据偏移量和长度均为32-bit 无符号整型数。
(2) 数据元素
数据元素是数据对象中的裸数据部分。
(3) 在HDF 文件中将数据对象分组
在HDF 文件中通常将含有相关数据的数据对象分为一组。这些数据对象组称为数据集。HDF 用户采用应用界面来处理这些数据集。例如:一套8-bit的图像数据集一般有3个数据对象:一组对象用来描述数据集的成员,一组对象是图像数据,另一组对象则用来描述图像的尺度大小。一个数据对象可以同时属于多个数据集,例如包含在一个栅格图像中的调色板对象,如果它的标识号和参照值也同时包含在另一个数据集描述符中,那么则可以被另一个栅格图像调用。
看来是个比我还新的新手。dataset是内存中的数据库,从数据库中查询出来的多张表可以放在一个dataset里面,用的时候可以直接从dataset中查询,而不用再一次访问数据库(当前是在数据库没有更新前)。
下面是我写的一个专门用来连接access的类,不过这里没有加上异常捕捉。
using System
using System.Text
using System.Data
using System.Data.OleDb
namespace dbConnect
{
public class ClassOledb
{
OleDbConnection myconnection//声明连接对象
public ClassOledb(string strConn)//通过构造函数实例化连接对象
{
/*一般access的连接字符串是这样的"Provider=Microsoft.Jet.OLEDB.4.0User Id=AdminJet OLEDB:Database Password=密码Data Source=数据库名.mdb"*/
myconnection = new OleDbConnection(strConn)
}
public OleDbConnection mycon()//初始化连接字符串
{
return myconnection
}
public DataSet chaxun(string sql)//查询表并返回结果
{
myconnection.Open()
OleDbDataAdapter myadapter = new OleDbDataAdapter(sql,myconnection)
myconnection.Close()
DataSet myset = new DataSet()
myadapter.Fill(myset)//将查询的表填充到数据集(DataSet)
return myset
}
public int edit(string sql)//修改表的方法
{
int lineCount = 0//修改数据库影响的行数
myconnection.Open()
OleDbCommand mycommand = new OleDbCommand(sql,myconnection)
lineCount=mycommand.ExecuteNonQuery()
myconnection.Close()
return lineCount
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)