海关二期gbase8a集群使用手册8ampp cluster程序员篇_第1页
海关二期gbase8a集群使用手册8ampp cluster程序员篇_第2页
海关二期gbase8a集群使用手册8ampp cluster程序员篇_第3页
海关二期gbase8a集群使用手册8ampp cluster程序员篇_第4页
海关二期gbase8a集群使用手册8ampp cluster程序员篇_第5页
已阅读5页,还剩388页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GBase8aMPPCluster程序员手册ADO.NET篇,南大通用数据 本文档所涉及的软件著作权、和知识已依法进行了相关、登记,由南大通用数识保护条例》和相关国际条约、法律、以及其它知识法律和条约的保护本文档包含的南大通用公司的信息由南大通用公司合法拥有,受法律的保护,南大通用何单位和个人南大通用公司,不得使用、修改、再发布本文档的和内容,否则将视为,南大通用公司具有依法其责任的权利。华苑产业区海泰发展六道6号海泰绿色产业J座 是南大通用数据技术向中民国家商标局申请的注册商标,商标权由南大通用公司合法拥有,受法律保护。南大通用公司许可,任何单位及个人不得以任何方式或理由对该商标的进行使用、、修改、传播、抄录或与其它产品使用销售。凡南大通用公司商标权的,南大通用公司将依其目前 手册简 公 GBaseADO.NET概 GBaseADO.NET版 安装文 GBaseADO.NET结 使用GBase 创建数据库连 连接字符 打开和关闭数据库连 操作数据 数 更新数 使用GBaseADO.NET过 通过GBaseADO.NET创建过 在GBaseADO.NET中调用一个过 GBaseADO.NET中的事 使用预处理语 使用预处理语句的优 使用GBaseADO.NET处理日期和时间信 使用无效日期的问 解决无效日期的方 使用GBaseADO.NET处理BLOB数 将文件写到数据 从数据库中BLOB数据写入到一个文 在全局配置文件中添加 在.NET应用程序中使用 在GBaseADO.NET中使用Crystal 创建数据 创建报 显示报 使用GBaseADO.NET中的 使用GBaseDataAdapter填充 使用多个GBaseDataAdapter填充 GBaseADO.NET数据类型映 GBaseADO.NET高可用特 集群高可用 集群负载均 GBaseADO.NET连接池特 什么是连接 什么是负载均衡连接 使用负载均衡连接 清除连接池资 GBaseADO.NETVisualStudio插 什么是VisualStudio插 创建基于GBase数据源的数据连 打开和关闭数据连 查看连接信 保存数据连 使用插件管理GBase数据 管理 管理视 管理过 管理函 管理用户定义函数 查 GBaseSQL编辑 什么是GBaseSQL编辑 新建GBase文 执行SQL语 持久化文 使用GBase数据 在微软商业智能(BI)项目中使用GBase数据 处理连接异常及常用错误代 处理连接异 常用错误代 GBaseADO.NET常见问 使用GBaseADO.NET时的版本问 SQL语句执行后,长时间没返回的处 SQL语句兼容问 VisualStudio插件正常安装后不能使 GBaseADO.NET的客户端类介 mand mand成 mand构造函 mand属 mand方 mandBuilder mandBuilder成 mandBuilder属 mandBuilder方 GBaseConnection GBaseConnection成 GBaseConnection构造函 GBaseConnection属 GBaseConnection方 GBaseConnection....................................................GBaseDataAdapter GBaseDataAdapter构造函 GBaseDataAdapter属 GBaseDataAdapter方 GBaseDataAdapter.................................................GBaseDataReader GBaseDataReader成 GBaseDataReader属 GBaseDataReader方 GBaseError GBaseError成 GBaseError构造函 GBaseError属 GBaseException GBaseException成 GBaseException属 GBaseHelper GBaseHelper成 GBaseHelper方 GBaseInfoMessageEventArgs GBaseInfoMessageEventArgs成 GBaseInfoMessageEventArgs构造函 GBaseInfoMessageEventArgs字 GBaseParameter GBaseParameter成 GBaseParameter属 GBaseParameter方 GBaseParameterCollection成 GBaseParameterCollection属 GBaseParameterCollection方 GBaseRowUpdatedEventArgs GBaseRowUpdatedEventArgs构造函 GBaseRowUpdatingEventArgs GBaseRowUpdatingEventArgs成 GBaseRowUpdatingEventArgs构造函 GBaseRowUpdatingEventArgs属 GBaseTransaction GBaseTransaction成 GBaseTransaction属 GBaseTransaction方 GBaseDbType枚 GBaseInfoMessageEventHandler委 GBaseRowUpdatedEventHandler委 GBaseRowUpdatingEventHandler委 前GBase8aMPPCluster程序员手册从程序员进行数据库开发的角度对GBase8aMPPCluster进行详细介绍。本手册介绍供客户端连接GBase8aMPPCluster服务器用的GBaseADO.NETGBaseADO.NET公下面的文本约约说加粗字表示文大写英文表示GBase8aMPPCluster等宽字表示代…表示被省略的内容GBaseADO.NET安全交互的接口程序,使用100%纯C#编写,并继承了ADO.NET类。操作GBase数据库。GBaseADO.NET支持以下支持GBase数据库全部特性,如过程、视图支持大型数据包,可发送和接收高达2GB的BLOB支持Windows平台下的TCP/IP套接字连支持Linux平台下的TCP/IP套接字或Linux注此文档为GBaseADO.NET开发手册,并不是ADO.NET的完整指南,关于ADO.NET的详细介绍请参考MSDN上ADO.NET相关章节GBaseADO.NETGBaseADO.NET1支持GBase8s全部特性,如过程、视图等GBaseADO.NET2支持GBase8a全部特性,如过程、视图等。3)GBaseADO.NET3支持GBase8a全部特性,如过程、视图等。GBaseADO.NET与GBase产品及与.NETFramework兼容性参见如下表。版支持的产品支持的.NetFramework版本兼容性GBase2.0、3.0、3.5、GBase8a2.0、3.0、3.5、安装文件我们提供的ADO.NET接口的msi文件格式GBaseADO.NET-<productversion>-<buildversion>-<osversionand例如GBaseADO.NET-3-build52.5-Windows-x86.msiGBaseADO.NETGBaseADO.NET(全称是.NETFrameworkDataProviderForGBase)提供给.NET应用程序GBase数据库、获取数据、管理数据的一套完整的解决方GBaseADO.NET的四个类及若干功能类具有以下功支持Linux平台下的TCP/IP套接字或Linux建立和管理与GBase数据库执行SQL语句 过对结果快速对结果集及管使用事GBaseADO.NET4-1GBase8aADO.NET下面是GBaseADO.NET的四个类介绍GBaseConnection代表一个与GBase能被继承。 mandGBaseSQLGBaseDataReaderGBaseGBaseDataAdapterDataSetGBaseGBase本章节主要描述.NETGBaseADO.NETGBase创建数据库连接.NET应用程序在使用数据库资源前,首先需要创建数据库连接,与数据库进行必要的交互,获取数据、更新数据,然后关闭数据库连接释放资源。下面的章节将逐步介绍如何使用BaeAO.ET构建连接字符串,创建连接、关闭连接以及获取数据和操作数据的方法。GBaseADO.NET传递到GBase数据源时设置的初始化下面是一个具体的连接字符串的例子此连接串连接到GBaseServer的test数据库,Server的地址是,端为默认值5258,验证信息中的用户名是gbase,是1111,并且不启GBaseADO.NETNETFramework的‚字符串类‛后,字符串会将连接串中的关键字转换成类的属性在GBaseADO.NET中可以使用的连接参数如下表5-1关键描UserId,Username,Uid,Username,user,userID连接GBaseServer的用户名。pwd,连接GBaseServer的Host,Server,DataAddress,Addr,NetworkGBase服务器的主机名。缺省数连接端口。onProtocol指明连接到GBaseServer时使用的通讯协议。对于socket连接时可以使用‚socket或当设置为true时,可以在一个command执行时指定多条SQL语句,语句之间使用‚;‛分OldSyntax,OldSyntax设置为true时,所有代码中使用‘@’符 mand("INSERTINTOTest(id)VALUES(@id)",c)。这个选项不建议使用连接GBaseServer默认描DefaultCommandTimeout,command向GBASESERVER发出SQL命令后,等待服务PersistSecurityfalseno如,在连接打开后,连接对象属性yesnoAllowZero如果设置为true,将返回针对date和datetime列的含有值的GBaseDateTime对象。如果设置为false,将抛出ConvertZero如果设置为true,则会将对象的值转换为合法值,如0000-00-00转换成ProcedureCacheSize,proceduree最近使用的25个过程的metadata(输0。RespectBinaryCONCAT('o,world',1)‛后的列值将转换为byte[]类型。设置为false时,则将列值转换为stringfunctions设置为true时,所有的服务器函数执string关键描TreatTinyAs设置为false时,则TINYINT(1)将被处理为INT。Set,CharacterSet表明用于发送给服务器的所有查询中的字符集编码,返回的结果集同样也使用此字符集。TreatBlobsAs二进制blob被处理为模式匹配的列被处理为模式不匹配的列被处理为的App.config中定义如下内容,如果应用中不包含App.config,则需要手动新建同名文件<sourcename="gbase"<addname="MySwitch"value="verbose"…注上述其中value="verbose默认描可选值可以是字符串,也可为数值,如下列表中定义 不开启 仅限错误信息 警告消息和错误信息 提示信息、警告消息和错误信息 IgnorePrepare,insertintotbvalues(@a),则在每次执行相同语句时,如insertintovalues(188),只需将数据188发送给服务流量,提高执行效率UseProcedureprocedurebodies,s设置为true时,当执行过程时,参数AllowUsers是否在执行的SQL语句中允许存在用户变量,设置为true户变量,如SET@a='test';SELECT@a;AutoEnlist,当使用分布式事务时,该关键字指示GBase.Data.GBase是否检测事务上下文并自动在分布式事务范围中登记连接。如果AutoEnlist=true,连接将自动如果AutoEnlist=false,连接不关键描记。登记后使用 plete()方法可将该分布式事务提交,使用TransactionScope.Dispose()方法则回滚设置为true时,定义为交互式客户端;为false时,定义为非交互式客户端。交互式客户端为与Server通讯频繁的一类连接,非交互式客户端为通讯不频繁的连接0TCP(与Server没有任何数据交互)超过定义的ConnectionTimeout,TCP包发出前的等待时间。默认值0为不发送连接池参数GBaseConnection对象将从连接池中获取。可设置的值为true和false,yes和no0设为0则无限期等待。单位秒。maxactiveumActivemaxidlelifetime,umIdle空闲连接存活默认描maxinuselifetime,uminuseLifeTime,0已用连接存活闭。0则为无限长时间。单位秒。testwhileidle,是否检查连接的有效性maxidlelifetimemaxinuselifetime束。空闲连接是否能够与Server正常交互动态补充空闲连接数量可设置的值有truefalseinvalididletestloadstrategy, 轮询策略 connectionreset,设置为trueC#usingusingSystem.Linq;usingusingSystem.Data;namespace{class{staticvoidMain(string[]{String_ConnStr="server=1;userusing(GBaseConnection_Conn=new{{}

_Conn.ConnectionString=//docatch(GBaseException{}{if(_Conn!=null}}}}}通过GBaseADO.NET接口GBaseServer数据需要下面的步使用GBaseConnection使 mand创建命令对使用连接对象打开连设置命令对象的CommandText执行命令对象的ExecuteReader方法后返回结果下面的例子将展示如何循环某一列的所有数据,并打印出来C#usingusingSystem.Linq;usingusingusingnamespace{class{staticvoidMain(string[]{String_ConnStr="server=1;userusing(GBaseConnection_Conn=new{

{

_String_CmdText="select*mandcmd= GBaseDataReaderreaderwhile{}}catch(GBaseException{}{if(_Conn!=null}}}}}通过GBaseADO.NET接口修改GBaseServer数据需要下面使用GBaseConnection使 mand创建命令对使用连接对象打开连设置命令对象的CommandText属性,指明SQL修改语句(InsertUpdate调 mand的ExecuteNonQuery方法执行SQL修改语下面的例子将展示如何打开数据库连接,向test用同样的步Delete或者Update据。C#usingusingSystem.Linq;usingusingSystem.Data;namespace{class{staticvoidMain(string[]{String_ConnStr="server=1;userusing(GBaseConnection_Conn=new{{tring_CmdText="insert`test`(`varchar_column`)values(‘varchar_value’)mand_Cmd= }catch(GBaseException{}{if(_Conn!=null}}}}}使用GBaseADO.NET过mandExecuteNonQuery下面是创建过程的步骤使用GBaseConnection使 mand创建命令对使用连接对象打开连设置命令对象的CommandText属性,指明创建过程语句,并关联连执行命令对象的ExecuteNonQuery完成创建下面的示例是使 mand对象创建过程的完整过程C#usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingGBase.Data;usingSystem.Diagnostics;usingnamespace{class{staticvoidMain(string[]{GBaseConnection_Conn=new_Conn.ConnectionString=

{

mand_Cmd= Console.Wriine("Connectingto_Cmd.Connection=mandText="DROPPROCEDUREIFmandText="DROPTABLEIFEXISTSmandText="CREATETABLEemp(empnoINTNULLAUTO_INCREMENTPRIMARYKEY,first_nameVARCHAR(20),last_nameVARCHAR(20),birthdateDATE)";mandText="CREATEPROCEDUREadd_emp("+"INfnameVARCHAR(20),INlnameVARCHAR(20),INDATETIME,OUTempnoINT)""BEGININSERTINTOemp(first_name,birthdate)""VALUES(fname,lname,DATE(bday));SETempnoLAST_INSERT_ID();}catch(GBaseException{Console.Wriine("Error"+ex.Number+"occurred:"+}{if(_Conn!=}}}}使用GBaseADO.NET调用一个过程,要先创建一个mand对象并且使用属性CommandText传递过程名,并将属性CommandType设为CommandType.StoredProcedure。为过的每个输入、输出参数创建一个mand参数。使用mand.ExecuteNonQuery()方法来调用过程。调用过程的步骤使用GBaseConnection使 mand创建命令对使用连接对象打开连CommandType为CommandType.StoredProcedure,设置命令对象的参数与库中要的过程参数一一对执行命令对象的ExecuteNonQuery方法完成调用使 下面是使用GBaseADO.NET调用一个过程并获取输出参数的完整子C#usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingGBase.Data;usingGBase.Data.GBase;usingSystem.Diagnostics;namespace{class{staticvoidMain(string[]{GBaseConnection_Conn=new_Conn.ConnectionString={

mand_Cmd= Console.Wriine("Connectingto_Cmd.Connection=mandText=mandType= _Cmd.Parameters["@lname"].Direction= "1940-06-

Console.Wriine("Employeenumber:"+Console.Wriine("Birthday:"}catch(GBaseException{Console.Wriine("Error"+ex.Number+"hasoccurred:"+ex.Message);}{if(_Conn!=}}}}GBaseADO.NET中支持事务,可以使用GBaseConnection对象的BeginTransaction函数开始一个事务,并默认使用 mitted模式初始事务中可以对单个表执行多个操作,或者对多个表执行多个操作,在事务未提交前,事务中的这些命令执行后并不是真正的影响数据库记录。当调用BeiTrnacin返回对象的omit方法时,才会真正的影响记录。在GBaseADO.NET使用事务时需下使用GBaseConnection使 mand创建命令对使用连接对象打开连使用连接对象的BeginTransaction命令对命令对象执行失败后,执行事务对象的回滚方法下面的例子展示在GaseDO.NET中如何使用事务。[C#]usingusingSystem.Linq;usingusingGBase.Data;usingSystem.Diagnostics;namespace{class{staticvoidMain(string[]{GBaseConnection_Conn=new_Conn.ConnectionString=mand_Cmd=new GBaseTransaction_Trans=null;

{

Console.Wriine("Connectingto_Trans=_Cmd.Connection=_Cmd.Transaction= mandText= mit=/mandText="insertintomandText="insertintoConsole.Wriine("Transactionhas}catch(GBaseException{Console.Wriine("Error"+ex.Number+"hasoccurred:"+ex.Message);}{if(_Conn!=}}}}在GBaseADO.NET中的预处理语GBaseADO.NET中使用预处理语句,能明显改善一个SQL语句执行多次GBaseADO.NETmand命令对象,并且设置相关属性及定义查询语句后调用命ExecuteNonQuery()、ExecuteScalarExecuteReader下面是在GBaseADO.NET中定义预处理语句的步骤使用GBaseConnection使 mand创建命令对使用连接对象打开连设置命令对象的CommandTextPrepare增加命令对象的Parameters的参ParametersExecuteNonQuery下面的样例代码演示如何定义预处理语句和使用预处理语句功能完成数据的批量插入。C#usingnamespace{class{staticvoidMain(string[]{StringconnectionString=GBaseConnectionconn=newmandcmd= {

cmd.Connection=conn;mandText="DROPTABLEIFEXISTSgsTable";bigint,c2varchar(100)@number,

mandText="INSERTINTOgsTablecmd.Parameters.AddWithValue("@number",1);for(inti=1;i<=1000;{

cmd.Parameters["@number"].Value=i;cmd.Parameters["@text"].Value="Astring}}catch(GBaseException{Console.Wriine("Error"+ex.Number+"hasoccurred:"+ex.Message);}}}}下面列举了预处理语句的因为每次对预处理语句的执行只需发送与参数相关的数据,所以该执行方式减低网络流量。因为预处理语句是在客户端和服务器之间的传输过使用二进制协议,使用GBaseADO.NET处理日期和时间信GBase数据库和.NET语言处理日期和时间信息的方式是不同的,GBase数据库允许的日期有时不能用一个.NET的数据类型表示,比如‚0000-00-00由于GBase数据库允许‚0000-00-00‛日期值到Date类型字段‚0000-00-0000:00:00‛和NULL时间日期值到DateTime类型,但这些日期值都是无效的,.NET框架的日期对象和日期时间对象不支持这些值。对于使用无因此.NETDataSet对象不能使用GBaseDataAdapter类的Fill方法填充,因为无效日期的转换将会System.ArgumentOutOfRangeException异常。解决无效日期的方法有如下三种限制无效日期、处理无效日期和处理NULL限制无效日期日期问题的最好解决办法是限制用户输入无效日期,该方法可以在客户端或服务器端任何一方实现。客户端实现.NETFramework为应用程序提供了日期控件,当应用程序需要输入日期时日期数据进入数据库时都可通过过程完成,无效日期的限制在过处理无效日期GBaseDataReader.GetValue()方为有效日期值返回一个.NETDateTime对AllowZeroGBaseDateTime无效日期的数据绑定仍然可能产生错误(0000-00-00零日期不会产生错误,如2012-13-35;0:50:25,这与GBaseDateTime类支持NULL日期,但是.NETDateTime事先查NULL就把一个GBaseDateTime转换为一个DateTime时,处理NULL日期NETDateTime类型不支持NULL值,在查询中DateTime型变量赋值时,必须首先检查该值是否为NULL。使用GBaseDataReader得到DateTime列数据时,应在将获取到的值赋值给DateTime变量前用IsDBNull方法检查数据是NULL,如下面的样例代码中所示。C#if(!gsTime=gsTime=GBaseADO.NETBLOB使用GBase数据库时经常会在BLOB列中二进制数据,GBase数据库支持BLOB数据类型TINYBLOB、BLOB、MEDIUMBLOBLONGBLOB。本节中的例子会使用一个带有BLOB列的表,使用下面的语句生成file表。file_id表主键,file_name的文件名,file_size文件的大小file存储文件内容。CREATETABLEfilefile_idSMALLINTUNSIGNEDAUTO_INCREMENTNOTNULLPRIMARYfile_nameVARCHAR(64)NOTNULL,file_sizeMEDIUMINTUNSIGNEDNOTNULL,fileMEDIUMBLOBNOTNULL);下面的代码使用FileStream对象打开一个文件,把文件内容读到一个字节数组中,并且把它file中。C#usingSystem;namespace{class{staticvoidMain(string[]{GBaseConnectionconn=newGBaseConnection();mandcmd=new stringSQL;intFileSize;FileStreamfs;stringstrFileName=@"c:\newfile.png";conn.ConnectionString={

fs=newFileStream(@"c:\test.bmp",FileMode.Open,FileSize=(int)fs.Length;rawData=newbyte[FileSize];fs.Read(rawData,0,FileSize);@FileSize,

SQL="INSERTINTOfileVALUES(NULL,}

cmd.Connection=mandText=SQL;Console.Wriine("FileInsertedintocatch(GBaseException{Console.Wriine("Error"+ex.Number+"hasoccurred:"+ex.Message);}}}}GBase的值,该变量决定能发送给GBase服务器的数据包(比如一行)max_allowed_packet时需注意BLOB要将一个文件写到数据库需要将文件转换为一个字节数组,然后将该字节数组作为一个NSRT语句的参数,通过GaseD.NT将值写入到表中。下面的代码从上一节中创建的file表中获得一行,并将数据写入到文件中。C#示例usingSystem;namespace{class{staticvoidMain(string[]{GBaseDataReaderGBaseConnectionconn=newGBaseConnection();mandcmd=new stringSQL;intFileSize;FileStreamfs;conn.ConnectionString=SQL="SELECTfile_name,file_size,fileFROMfile";{cmd.Connection=mandText=SQL;gsData=cmd.ExecuteReader();

ifthrownewException("TherearenoBLOBsFileSize=rawData=new rawData,0,fs=newFileStream(@"C:\newfile.png",FileMode.OpenOrCreate,FileAccess.Write);fs.Write(rawData,0,FileSize);Console.Wriine("Filesuccessfullywritten}catch(GBaseException{Console.Wriine("Error"+ex.Number+"hasoccurred:"+ex.Message);}}}}在全局配置文件中添加如果您有很多.NET程序会使用一个相同的连接串数据库资源,并且希望此连接串是可以在应用之行配置时,可以使用mchn.onig配置文件满足需求。即在配置文件中添加一个CnncioSring条目,并指定数据源名字(DSN,应用即可使用数据源名字获取到连接串信息。下面的步骤将介绍如何在machine.config添加一个条目使用文本编辑器或者XML编辑器打connectionStrings><addname=‚DSNGBaseDatabase‛的machine.config配置文件是.NETFramework文件,修改不当则会导的.NETFramework2.0.NETFramework3.0、3.5、4.0 在.NET应用程序中使用machine.config文件中的资源时,首先需在工引.NETFramework的组件System.configurationusing语句将System.configuration命名空间中的类引入到工。在工System.configuration组件5-1System.configuration在.NET工使用数据源C#String_gcConn在GBaseADO.NET中使用Crystal本节展示如何在GBase和ADO.NET中使用CrystalReportsXI。在CrystalReports中创建报表时,可利用两种方法获取GBase数据据第法是在设计报告时使用GBaseODBC作为一个ADO数据源,可第二种方法是在.NET程序中创建一个DataSet并将其保存为XML格式下面的代码演示将一个查询的结果生成一个DataSet并把它写入XML文件保C#GBaseConnectionmandcmd;conn=newGBaseConnection();cmd=new gsAdapter=newconn.ConnectionString=;{mandText="SELECTAScity.populationASCityPopulation,"",country.population,country.continent"+"FROMcountry,cityORDERBYcountry.continent,";cmd.Connection=conn; mand=gsData.WriteXml(@"C:\dataset.xml",}catch(GBaseException{MessageBox.Show(ex.Message,"Reportcouldnotbecreated",MessageBoxButtons.OK,MessageBoxIcon.Error);}启导,只需要打开CrystalReports并且从File菜单中选择New>StandardReport选项。向导首先要求提供一个数据源,如果使用GBaseODBC作为数据源,选择数据源时。如果使用一个保存的DataSet,就选择ADO.NET(XML)选项并浏览保存的数报表创建之后,选择File菜单中的ReportOptions...菜单项,取消Report选项的SaveData下面的步骤使用 WinForm应用程序显示报表,显示报表前,需使5.9.2的步骤生成报表文件world_report.rpt在工程项目中用于显示报表的组件在用户界面上拖放一个ViewerGBaseConnection使 mand创建命令对GBaseDataAdapter使用Report创建报表对DataSet设置命令对象的CommandText属性,指明查询语使用报表对象加载 文设置报表对象的数据源为数据集对设置ViewerC#usingCrystalDecisions.CrystalReports.Engine;usingSystem.Data;ReportgsReport=newReport();DataSetgsData=newDataSet();GBaseConnectionconn;mandcmd;GBaseDataAdaptergsAdapter;conn=newGBaseConnection();cmd=new gsAdapter=newconn.ConnectionString="server=;uid=root;"+{mandText="SELECTAScity.populationASCityPopulation,"+",country.population,country.continent"+"FROMcountry,cityORDERBYcountry.continent,";cmd.Connection= mand=gsViewer.ReportSource=gsReport;}catch(GBaseException{MessageBox.Show(ex.Message,"Reportcouldnotbecreated",MessageBoxButtons.OK,MessageBoxIcon.Error);}GBaseADO.NETGBaseADO.NETDataAdapterGBaseDataAdapter查询的结果填充到DataSet中,还可将DataSet中修改的数据保存回数据库。GBaseDataAdapter可将数据表映射为DataSet,并在断开连接后使用DataSet内DataSet是数据的内存驻留表示形式,它提供了独立于数据源的一致关系编程模型。DataSet表示整个数据集,其中包含表、约束和表之间的关系。由于DataSet独立于数据源,因此DataSet可以包含应用程序本地的数据,也可以包含来自多个数据源的数据。关于DataSet更详细的介绍请参考MSDN有关章mand的Execute系列方法就可以了。GBaseDataAdapter的作用是实DataSetDBDataSetGBaseDataAdapter提供 mand对象并且设置了SQL查询语句后可使用Fill方法填充DataSet以下代码展示如何使用GBaseDataAdapter填充DataSetC#示例StringqryString="SELECT*FROMGBaseDataAdapteradapter=newGBaseDataAdapter(qryString,conn);DataSettest=newDataSet();adapter.Fill(test,一个DataSet可以与很多GBaseDataAdapter象一起使用。每个GBaseDataAdapter都可用于填充一个或多个DataTable对象并将更新解析回数据源。DataRelationDataSet,这样您就可以关联来自不同数据源的数据。一个或多个GBaseDataAdapter对象可以处理与每个数以下代码示例使用同一数据源填充CustomersOrders表。已填充的表通过DataRelation相关联,这样,客户列表将与相应客户的订单一起显示出来。CustomersCREATETABLECustomersCustomerIDvarchar(5)NOTNULLPRIMARYKEY,NameVARCHAR(40)NOTNULL);OrdersCREATETABLEOrdersOrderIDintNOTNULLPRIMARYKEY,CustomerIDVARCHAR(40)NOTNULLC#GBaseDataAdaptercustAdapter=GBaseDataAdapter("SELECT*FROMCustomers",GBaseDataAdapterorpter=newGBaseDataAdapter("SELECT*FROMOrders",_Connection);DataSetcustomerOrders=neworpter.Fill(customerOrders,"Orders");DataRelationrelation=customerOrders.Relations.Add("CustOrders",foreach(DataRowpRowin{foreach(DataRowcRowinpRow.GetChildRows(relation))Console.Wriine("\t"+cRow["OrderID"]);}GBase数据库与.NETFramework使用不同的数据类型。为了在和写入数据时保证数据的完整性,GBaseDataReader将公开用于返回GBase.Data.Types对象的GBase特定的类型化器方法。GBaseServer数据类型和.NETFramework数据类型通过DbType和GBaseDbType类中的枚举值定义,当您指定GBaseParameter数据类型时可以使用这些枚举值。eader的DbType类ader的器eader的DbType类ader的器eader的DbType类ader的器eader的DbType类ader的器GBaseADO.NET高可用特性是针对GBase数据库集群提供客户端高可用及负本章将介绍在GBaseADO.NET中如何开启和使用集群高可用性特性(集群高集群高可用在通过GBaseADO.NETGBase集群时,如果集群当前节点不可用,希望直接连接到集群中一个可用的节点上时,我们可以使用GBaseADO.NET集群高可用性功能(该功能需要GBaseADO.NET3及以上版本。GBaseADO.NET集群高可用性是接口针对GBase集群开发的在接口层面的高可高可用性适用于扁平结构的GBase集群,在通过GaseDONET创建连接时,如果当前节点不可用时,接口会根据相关参数信息把连接数据库请求自动路由到集群其他可用的节点上。假设存在如下场景123连接串中设置server和iplist参数String_ConnString‚server=;failover=true;iplist=;‛当应用连接到集群点1时发现故障,此时接口不抛出错误而会将2,并返回给客户端,下图说明了此种场景。下面例子介绍如何开启集群高可用功能,并使用、、做为高可用节点。C#usingusingSystem.Linq;usingusingSystem.Data;namespace{class{staticvoidMain(string[]{String_ConnStr=using(GBaseConnection_Conn=new{{}

_Conn.ConnectionString=//docatch(GBaseException{}{if(_Conn!=null}}}}}集群负载均均衡功能(该功能需要GBaseADO.NET3及以上版本。集群负载均衡时设置连接串的Failover、IpList、GClusterID参数。分担负载。但在每个连接串中只能指明一个GClusterID和此集群的IpList假设存在如下场景23连接串中设置server、iplist和GClusterID参数String_ConnString4;gclusterid=g1‛接口会将18个连接请求分摊在节点1、节点23上个节点上会有6个请求线注当某个连接请求集群节点1时,接口发现节点1故障后,在后续的连接请求到来时接口将不再给节点1分配请求,而会将请求分配给节点2(若节点2故障时会分配给节点。下面例子介绍如何开启集群负载均衡。例子中会创建18个连接对象C#usingusingSystem.Linq;usingusingSystem.Data;namespace{class{staticvoidMain(string[]{String_ConnStr=ue;iplist=,;gclusterid=g1";GBaseConnection[]_Conn=newGBaseConnection[18];{for(inti=0;i<_Conn.Length;{_Conn[i]=new}}catch(System.Exception{}{for(inti=0;i<_Conn.Length;{if(_Conn[i]!={if(_Conn[i].State==System.Data.ConnectionState.Open)}}}}}}GBaseADO.NET2Build51.0在GBase集群数据库时,当量或并发量很大时,频繁的打开、关闭数据库连接非常耗时,并且会增加数据库的负载压力。GBaseADO.NET提供的连本章将介绍在GBaseADO.NET中如何开启和使用基于负载均衡的连接池能什么是连接连接池是指在客户端连接请求到来时,可以从缓存的若干可用连接中快速获取连接,减少了创建、打开连接的时间。并且在使用后并不关闭,而是重新缓存起来提供给下接请求使用。什么是负载均衡连接池基于负载均衡的连接池是在只缓存连接的连接池基础上,根据客户端负载均衡策略模式将客户端连接请求分摊到集群节点,根据服务端策略模式可得到负载最小的缓存连接提供给客户端。基于负载均衡的连接池有根据服务端负载策略方式实时或定期获取最小负载节点缓存连使用负载均衡连接若要使用负载均衡连接池功能,需要在连接串中配置相关的关键字。有关更详细的关键字信息在5..1章节‚表-1连接参数表‛中介绍。假设存在如下场景现有集群中存在473,74,75,server=73;userid=gbase;password=gbase database=test;pooling=true;minidlesize=20;maxidlesize=40;gclusterid=g1;failover=true;initialpoolsize=20;testonborrow=true;testonreturn=true;testwhileidle=true;loadbalancestrategy=polling;maxinuselifetime=0;客户端使用GBaseConnection通过上述连接串进行初始化,并打开连接后。驱动会在集群的每个节点上创建5个连接,并缓存起来,并以polling(轮询)的方式先从173节点获取缓存若发现173节点故障,会尝试获取174节点的缓存连接,若发现174节点故障会尝试获取175节点缓存连接,直到获取到176节点的缓存连接。如果所有节点C#usingusingSystem.Linq;usingusingSystem.Data;namespace{class{publicint_finish=0;publicint_thread=20;publicint_runTime=500;staticvoidMain(string[]{stringenableNewPoolStr="server=73;userid=gbase;password=gbase "pooling=true;Connectionlifetime=0;minidlesize=20;max"checkouttimeout=0;initialpoolsize=24;maxactivesize=2000;‛+"maxidlelifetime= "testonborrow=true;testonreturn=true;testwhileidle=true;‛+"invalididletestperiod=30;supplyidleperiod=20;loadbalancestrategy=polling;maxinuseThread[]_WorkThread=newThread[_thread];for(inti=0;i<_WorkThread.Length;{}while{if(_finish>=_thread)break;}//releaseresources}//////privatevoidWorkThread(Object{String_ConnectionString=inttimes=_runTime;while(times!=0){{

using(GBaseConnection_ConnObject={using( mand_CmdObject= {

mandText=_CmdObject.Connection=_CmdObject.}}}catch(GBaseException{

}}}}}清除连接池资源在应用中开启连接池时,连接池会缓存连接并提供给请求使用,所以在连接池开启时会将连接资源保存起来,并在设置的缓存连接的生命周期内不会主动关闭。当应用程序关闭时,很可能没有达到生命周期规定的上限,此时在应用程序关闭时不会关闭缓存的连接。通常情况下回收器(GC)会清除不使用的资源,但有些资源不会清除,比如连接池缓存的连接。如果这些连接在不使用时没有被清除,则会始终占用Sever资源,导致Sever负载过大,造成资源浪费。此时需要开发人员调用清理连接池的方法关闭这些缓存的连接。以下是GBseDONET提供的清理连接池的方法publicstaticvoidClearPool(GBaseConnection使用场景当调用驱动的应用程序不在使用此集群连接池资源时调用。调用方法GBaseConnection.ClearPool(connection);connectionpublicstaticvoid(多集群)使用场景当调用驱动的所有应用程序不在使用集群连接池时调用。调用方法GBaseConnection.ClearAllGcPools();GBaseADO.NETVisualStudioGBaseADO.NETVisualStudio插件兼容VisualStudio2008和2010,并可在SQLSERVER2008R2自带的SQLServerBusinessInligence使用VisualStudio插件前,如果需要在VS2008上使用,需要安装VisualStudio2008SDKVS2010使用,需要安装VisualStudio2010SDKSP1。什么是VisualStudioGBaseADO.NETVisualStudio插件是在VisualStudio开发具中整合,使用VisualStudioSDK的DDEX(DataDesignerExtensibility)技术开发的功能集合,安装后会在开发环境中新增GBase数据创建基于GBase数据源的数据连接使用插件管理GBase数据库(表、视图、过程、函数、UDFGBaseSQL(创建/保存GBaseSQL创建基于GBase数据源的数据连接口中创建基于GBase数据源的数据连接。以选择‚视图‛菜单中的‚服务器资源管理器‛,如下图9-1所示。在数据接节点上点击右键后即可添加新‚服务器资源管理器‛在英文环境下为‚ServerExplorer‛图9-1在服务器资源管理器中添打开连现‚更改数据源‛框,则需要在‚添加连接‛视图中点击‚更改‛按钮后会出现‚更改数据源‛框9-3示。图9-3添加连接(示例数据源)从列表中选择‚GBaseServer‛项目后,则会弹出‚添加连接 框,如下9-4‚数据连接‛IP(Database)格式命名,如5(test)。此后的操作都会在此子节点上进行。如创建表、视图、过程、函数、UDF。图9-4添加GBase数据源连接在‚添加连接‛框上输入所需信息的步骤是为新建连接生成连接字符串,如果需要添加额外的连接参数,可以点击高级按钮后在‚高级属性‛窗口中选择,如下图9-5所示。每个参数的含义请参考5..1连接字符串章节。图9-5高级属性关闭连样可以在选择节点后,VisualStudio出现的‚数据‛菜单中选择。如下图9-6所9-6VisualStudio在服务器资源管理器中新增了Gase数据源节点后,如果要查看当前节点使用的提供程序、版本、类型(厂商、连接字符串、状态,可在点击创建的子节点后查看‚属性‛框。如下图9-7所示。如果‚属性‛窗口没有显示在当前视图,可以从VisalStudio‚‚。在服务器资源管理器中新增了GBase数据源节点后,此节点如果不手动删除,则会自动保存,并且在下次打开VisualStudio时会同样显示在此位置。如下9-8。图9-8新增基于GBase数据源的数GBase数据GBase数据库的功能,如创建表\视图、修改表\视图定义、删除表\视图,创建过程\函数、修改过程\函数定义、删除UDF、删除UDF等功能,下面的章节将逐一介绍。包括创建表,修改表定义和删除表功能。这些操作在GBase数据源节点展开后的Tables节点上进行。创建在Tables节点上点击右键选择‚创建表‛命令或者执行VisualStudio‚数据‛菜单的‚新增‛子菜单下的‚表‛命令,则会显示列定义视图(图9-9)图10定义好列信息和表信息后,使用‚Ctrl+S‛保存定义,或者点击VisualStudio的‚标准‛工具条上的按钮保存。表保存后,会在Tables节点下新增一修改表定义 ,可使用VisualStudio的‚表设计器‛菜单的‚生成更改‛命令,见下图9-11。编辑完成后,使用‚Ctrl+S‛保存定点击VisualStudio的‚标准‛工具条上 按钮保存9-11VisualStudio 确定按钮后保存到SQL文件。见下图9-12。在点击表节点前面‚+‛号后显示该表定义的列,以删除在新建表节点上点击右键,执行‚删除‛命令,可执行删除表操图9-13所示包括创建视图,修改视图定义和删除视图功能。这些操作在GBase数据源节点展开后的Views节点上进行。创建视在Views节点上点击右键选择‚创建视图‛命令或者执行VisualStudio的数据‛菜单的‚新增‛子菜单下的‚视图‛命令,则会显示视图定义模(9-14)输入视图定义的SQL语句后,使用‚Ctrl+S‛保存定义

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论