IStartupTask连接数据库的方法
“xiyangyang88”通过精心收集,向本站投稿了3篇IStartupTask连接数据库的方法,以下是小编为大家准备的IStartupTask连接数据库的方法,供大家参考借鉴,希望可以帮助到有需要的朋友。
篇1:IStartupTask连接数据库的方法
系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载。
IStartupTask调用IEfDataProvider进行数据库的初始化。
IEfDataProvider,SqlCeDataProvider:获取数据连接工厂,不同类型数据库,连接工厂不同。
接口IStartupTask的实体类EfStartUpTask的实现如下:
public class EfStartUpTask : IStartupTask { public void Execute { var settings = EngineContext.Current.Resolve(); if (settings != null && settings.IsValid()) { var provider = EngineContext.Current.Resolve(); if (provider == null) throw new NopException(“No EfDataProvider found”); provider.SetDatabaseInitializer(); } } public int Order { //ensure that this task is run first get { return -1000; } } }
SqlCeInitializer,CreateCeDatabaseIfNotExists初始化数据库。
IDbContext,NopObjectContext系统数据库操作上下文。加载所有数据库映射类:EntityTypeConfiguration。代码如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { //dynamically load all configuration //System.Type configType = typeof(LanguageMap); //any of your configuration classes here //var typesToRegister = Assembly.GetAssembly(configType).GetTypes() var typesToRegister = Assembly.GetExecutingAssembly().GetTypes() .Where(type =>!String.IsNullOrEmpty(type.Namespace)) .Where(type =>type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration)); foreach (var type in typesToRegister) { dynamic configurationInstance = Activator.CreateInstance(type); modelBuilder.Configurations.Add(configurationInstance); } //...or do it manually below. For example, //modelBuilder.Configurations.Add(new LanguageMap()); base.OnModelCreating(modelBuilder); }
此方法是继承自DbContext。并在系统启动时调用,建立数据表与实体的对应关系。
在类型依赖注册类Nop.Web.Framework.DependencyRegistrar中实现数据库工厂的创建、数据库的加载。如下代码:
//data layer var dataSettingsManager = new DataSettingsManager(); var dataProviderSettings = dataSettingsManager.LoadSettings(); builder.Register(c =>dataSettingsManager.LoadSettings()).As(); builder.Register(x =>new EfDataProviderManager(x.Resolve())).As().InstancePerDependency(); builder.Register(x =>(IEfDataProvider)x.Resolve().LoadDataProvider()).As().InstancePerDependency(); builder.Register(x =>(IEfDataProvider)x.Resolve().LoadDataProvider()).As().InstancePerDependency(); if (dataProviderSettings != null && dataProviderSettings.IsValid()) { var efDataProviderManager = new EfDataProviderManager(dataSettingsManager.LoadSettings()); var dataProvider = (IEfDataProvider)efDataProviderManager.LoadDataProvider(); dataProvider.InitConnectionFactory(); builder.Register(c =>new NopObjectContext(dataProviderSettings.DataConnectionString)).InstancePerHttpRequest(); } else { builder.Register(c =>new NopObjectContext(dataSettingsManager.LoadSettings().DataConnectionString)).InstancePerHttpRequest(); } builder.RegisterGeneric(typeof(EfRepository)).As(typeof(IRepository)).InstancePerHttpRequest();
接口IEfDataProvider 的实体类SqlServerDataProvider的数据库初始化方法如下:
///
/// Set database initializer ///public override void SetDatabaseInitializer() { //pass some table names to ensure that we have nopCommerce 2.X installed var tablesToValidate = new[] {“Customer”, “Discount”, “Order”, “Product”, “ShoppingCartItem”}; //custom commands (stored proedures, indexes) var customCommands = new List
(); //use webHelper.MapPath instead of HostingEnvironment.MapPath which is not available in unit tests customCommands.AddRange(ParseCommands(HostingEnvironment.MapPath(“~/App_Data/SqlServer.Indexes.sql”), false)); //use webHelper.MapPath instead of HostingEnvironment.MapPath which is not available in unit tests customCommands.AddRange(ParseCommands(HostingEnvironment.MapPath(“~/App_Data/SqlServer.StoredProcedures.sql”), false)); var initializer = new CreateTablesIfNotExist(tablesToValidate, customCommands.ToArray()); Database.SetInitializer(initializer); }另外,EntityFramework本事是ORM框架,通过数据库访问上下文建立与数据库的连接及实体与数据表的对应广西。并通过创建IRepository的泛型实体类来实现对每一种数据的处理,也就是所谓的Dao层。业务逻辑层通过每种实体的数据访问仓库Repository来进行数据库操作。
[IStartupTask连接数据库的方法]
篇2:一种逻辑层次连接的工程数据库设计方法及应用
1 引言
工程数据库系统和传统数据库系统一样,包括工程数据库管理系统和工程数据库设计两方面的内容.工 程数据库设计的主要任务是在工程数据库管理系统的支持下,按照应用的要求,为某一类或某个工程项目 设计一个结构合理、使用方便、效率较高的工程数据库及其应用系统.数据库设计得好,可以使整个应用 系统效率高、维护简单、使用容易.即使是最佳的应用程序,也无法弥补数据库设计时的某些缺陷.这方面 的研究包括工程数据库设计方法和辅助设计工具的研究和开发.本文就工程数据库设计中的一些问题进行 讨论,阐述了工程数据库设计的基本概念和内容,以及工程应用领域中数据库设计的一些特性,介绍了一 种以层次分析为主,以连接关系为基础, 结合面向对象技术来进行工程数据库设计的方法及其应用.
2 工程数据库设计的特点
所谓工程数据库设计,是指从工程应用需要出发,设计出一个工程数据库结构的全过程.它的一个粗略 过程是:首先要对工程应用领域的数据进行需求分析,综合整理出被处理对象的概念.这种概念是独立于 工程数据库管理系统的,与具体的工程数据库管理系统无关.完成概念设计后,再根据实际情况进行数据 库的具体设计
对作为集成化CAD/CAM系统基础的工程数据库系统的设计,在吸取常规的设计思想同时 ,还要充分考虑与工程设计环境相关的一些特点,要适应工程数据处理的需要[1]
.2.1 工程数据库的 设计目标
工程数据库设计要达到的基本目标是要有效的为集成化应用提供所需要的工程数据,并且使 这些工程数据具有较高的稳定性.具体说,概念设计的目标就是通过对应用系统的信息需求进行描述和综 合,从概念上模拟工程应用的信息结构,便于用户理解.逻辑设计要产生一个具有数据独立性高、冗余度 低、数据一致性和完整性好等特点的逻辑数据结构,能满足并最小覆盖工程应用的数据需求;能被工程数 据库管理系统所处理.物理设计要产生一个可以有效予以实现的数据库的物理结构,以及与系统软件、硬 件及其分布情况有关的实现细节的设计.
2.2 注重设计方法的实用性
为了提高系统资源的利用率,简 化软件设计和数据的转换工作,避免系统开发中人力、物力、财力上的浪费,提高系统的生产率,就要考 虑到设计系统的实用性
通常数据库设计方法学的理论研究大都着重于一般性,而工程数据库设计的 实践更着重于在具体环境中的实用性.因此,一方面以满足用户需求作为设计的出发点和归宿,将信息需 求贯穿到数据库设计的全过程之中;另一方面,在对数据抽象程度、概念模型级别、数据模式类型以及设 计工具等方面,要根据设计环境和目标,着重其实际效果来进行选择和确定
.2.3 工程设计过程中的一些 特点
层次结构
设计人员开始工程项目或产品的设计时,对设计的产品或项目一层一层的将它们 分解,将一个复杂的问题,分成若干个简单问题,从而对它进行求解.如商场CAD设计中,也是一种以层次 为主的分析设计过程:商场可以分为楼层(又称店堂),在楼层店堂中常包含若干小区,小区又由配套和构 件组成.很多实例表明在一个工程或一个产品的设计开发过程中,层次结构化分析是问题求解的基本点
逻辑层次结构
随着分层的深入,层次结构会向着一种有向图的形式发展.因为每层上的子图深度是 不完全一致的,有的深有的浅,所以在这种层次结构中,上层除了可以调用直接的下一层外,还可以调用 其它下层的内容,但是下层结构不允许调用上层,这样的层次结构称之为逻辑层次结构
自顶向下与 自底向上相结合的设计方法
在设计过程中,经常采用自顶向下逐步求精的设计方法.经过一步一步的 分解完善,到最后才能取得较好的效果,满足实际需要.在具体设计过程中还要结合自底向上逐步综合的 方法.如在对商场CAD设计的工程数据库设计过程中,在逻辑分析阶段中运用了自顶向下的设计方法;而具 体设计阶段又采用了自底向上的设计方法
基于工程设计过程中的这些特点,在进行工程数据库设计 时,要充分发挥和利用这些特点,使工程数据库的设计过程能够与这些特点密切配合,工程数据库的设计 应包含:需求分析、工程数据库的划分、概念设计、逻辑设计与物理设计等.而贯穿整个设计过程的中心 思想是层次分析的方法.
3 逻辑层次连接的工程数据库设计过程
设计一个工程数据库,要考虑工程过程中的一些因素;为了确保工程数据库设计的优良性,还应遵循 一定的设计步骤.下面就围绕逻辑层次连接的工程数据库的设计过程进行讨论.
3.1 需求分析
在任何 设计中,首要的任务是完成详尽的需求分析,了解用户的需要.尤其要注重工程过程的特殊性
.充分 了解集成系统中各有关数据项
工程数据库系统是集成化系统中数据共享的基础.在进行工程数据库设 计时,只有充分的了解集成化系统中各应用软件对共享数据的要求,才可能对工程数据库的设计做到比较 全面合理
要了解各应用系统对共享数据的操作
工程数据库不仅要存储被应用系统处理过的数据 信息,同时还要为应用系统提供被处理的数据,从而就需要了解各应用系统对数据的处理要求.这样设计 出来的工程数据才会方便于应用系统的使用,提高应用系统的处理效率.
具有一定的可扩充能力
设计的工程数据库,不仅要满足当前的需要,而且还要考虑到今后的发展,如扩充应用系统或增加应用系 统的处理功能,以适应工程应用中集成化、网络化、开放计算等发展的需要.
3.2 库的划分
在需求分 析的基础上,要对工程数据库进行划分,工程数据库要能对各种不同应用系统中的数据交换、接口等进行 集中的描述和管理.为了有效的管理,以及提高集成系统的工作效率,方便各应用系统对数据的处理,就 需要根据工程过程中的特点对工程数据库进行必要的划分,将一个大系统进行分解,使一个大的工程数据 库系统分成若干个小一点的工程数据库
在集成化的CAD/CAM等系统中,通常有这样三类设计数据:系 统公用的共享数据;为子系统所共享的项目数据;以及为单个应用而使用的私有数据.在工程数据库的设 计过程中,分别将它们聚集一起,分别形成相应数据库.在KJ8920计算机的模拟过程中,将数据库划分成 器件库、物理参数库、连接关系库等几个库.将数据库这样划分后,提高了设计数据的一致性,方便了统 一管理,也减少了数据的冗余[2].在商场CAD系统的工程数据库设计中,将其分成了图象库(保存具有典 型风格的设计图象)、构件库(构件资料)、材料库、样板库、设计库等几类数据库.将一个大库分成几个小 库(一个样板库未压缩数据达200MB)后各个数据库任务明确,易于管理和理解
库划分好后,要对每个 库进行设计.划分成多库后,范围缩小了,而且各库均有一定的物理意义,与某个或某些应用相关,可作 为一个独立的环境而分别处理;不仅有利于工程数据库的设计,同时对分布式环境下的工程数据处理提供 了一种方法和手段.
3.3 概念设计
概念设计要进一步细化库的结构,使其能满足应用系统的功能和数 据流程.在概念设计阶段,采用了层次分析为主,对象分析为辅的方法.在分层的数据库中,数据结构是三 维的,除了有数据表外增加了表明层次的内容;上一层数据可展开成更详细的下一层的数据;这样可以方 便地实现系统需要哪一层的数据,就能够提取哪一层的数据.在商场CAD设计中,按店堂、小区、配套、构 件等层次构成了一个工程数据库系统;在此数据库中可以方便的提取店堂、小区、配套、构件直至整个商 场的任何一层的有关数据(如造价数据).
另外在概念设计阶段还将每个库视为由对象、层次结构、链 接信息等组成.从抽象的角度看,任何一个工程对象都是由一些原子对象和复合对象所构成.在这里可定义 一些基本概念:
定义1. 层次对象(Object).层次对象是可明确标识的实体.如商场、店堂、小区、构 件等都可视为一种层次对象.在这里层次对象具有一定的物理意义,并包含一定的关系和内容
在层次 对象之间,存在着某种关系,有时甚至是一种复杂的有向无循环图的关系.如在一个店堂中其小区的分布 是交叉的.在一个服装商场中常见到,在某一层(店堂)中交叉分布着男士服装、女士服装以及儿童服装等 小区.为了处理这种扩充了的层次关系.引进了联系、连接、关系等概念.以便能处理工程中的复杂关系.
定义2. 关系(Relation).关系表示2个对象间的相互依赖,它由一对连接组成,其中一个连接的源对象 是另一个的目的对象.如构件环行低柜(hd)可以用于化装品小区(hzpxq),也可用于烟酒小区(yjxq),其关 系可以表示为(hd,hzpxq)和(hd,yjxq).
定义3. 节点(Node).节点是一种实体对象,一个节点由具有 相同属性的一个或一组实体构成.如环行低柜构件、化装品小区、烟酒小区等都被视为一个具体的节点
根据处理的不同,进一步将节点分成两类,一类是中间节点,另一类为叶节点.中间节点表明它还有下 属层次,还能进一步细分.而叶节点则表明,已经分到了原子对象,不能或无需再分.在商场CAD系统中, 节点层为构件层,其它层次均视为中间层次
在工程过程中,某对象所包含的层次数目可能是不等的 ,这样叶节点所处的层次深度不同.为此设立了虚节点,虚节点是为了保证对象具有同样的层次深度,这 些节点只起逻辑上的作用,并不包含具体的内容.这样一个工程数据库可表示为(层Layer, 层次对象 Object, 关系Relation); 而层次对象又由节点和关系构成,即层次对象Object(节点Node, 关系 Relation)等
.3.4 逻辑设计
逻辑设计是将概念设计所产生的与具体工程数据库管理系统无关的数据 模式,转换成以工程数据库的逻辑数据模型表示的数据模式.理论上任何数据库管理系统都可以用来管理 工程数据.下面以工程数据库管理系统EDBMS为例[3—5],讨论工程数据库的逻辑设计.
1) 将概念模 式中的层转换为EDBMS的表
数据表可视为一种二维的关系结构.为了实现扩展的层次模型,将概念模型 中的每一层作为一个数据表;对于叶节点层由于其依附的关系不同,可分别转换为多个数据表.
2) 转 换实体对象为记录
在EDBMS中,由于它是一种面向记录的模式;对扩展层次模式中的各个实体,均将 其转换为数据记录,用记录来表示实体
3) 用连接来表示扩展层次模式中的联系
为了保证扩展层 次模型中的复杂关系.在EDBMS中专门提供了用于建立实体间联系的DDL和DML语言——Link族语句,该族语 句可以在库与库、表与表、表与记录、记录与记录之间建立一对一、一对多、以及多对多的关系.这样就 将复杂的联系进行了描述和处理.
3.5 物理设计
物理设计的任务是选择合适的存储结构和存取路径, 设计的主要目标是:提高数据库的性能,尤其要满足应用系统的性能要求;此外还要提高存储空间的利用 率[3]
在EDBMS的物理设计中,主要目标之一是如何提高事务的处理效率.在物理设计时就要利用 EDBMS的特点,如Link语句所提供的在复杂对象间建立联系,通过它可以快速的提取指定的数据,而无需 进行数据的查找,从而具有较快的数据检索速度.另外EDBMS还提供了多表多记录的处理方式[5],将一 个库的多个表或多条记录一次加载到内存中,从而减少了读盘的次数,提高了效率.
4 逻辑层次连接设计方法的应用
我们已将逻辑层次连接方法应用于“工程图纸管理系统”、“集成化商业CAD设计系统”等,由于它具 有关系/对象模式的优点,在数据检索应用中有着较高的效率.4.1 在工程图纸管理系统中的应用
BIDMS作为集成化CAD系统BICAD的一个子系统,是将BICAD系统中产生的设计图纸统一管理起来 [6].BIDMS利用图纸间的层次关系来组织管理图纸,已应用于建筑领域.不仅减少了各专业的输入工作量 ,提高了工效,消除了因数据输入差错而引起的设计错误和返工现象,而且避免了专业之间联系不够导致 的“错、漏、碰”等问题.在组织图纸时,每个设计项目建一个库.每一库里有专业表、类表、组表、序表 ,分别存放专业、类、组、序的信息.如图1所示.专业表、类表、组表中只有专业号、类号、组号属性, 序表中除了有序号信息外,还存放图纸的属性,如设计者,绘图员、图名、生成时间等.专业表和类表、类表和组表、组表和序表之间建立LINK关系,即某一专业(专业表中的一条记录)与此专业的类(类表中的 一条记录)用LINK链联系起来.同样类与组,组与序也联系起来.这样,用户要查看某专业的第几张图,就 可通过此表来得到DBK,迅速找到要看的图.
图1 BIDMS中库的设计
4.2 在其它方面的应用
逻辑层次连接的设计方法不仅可应用于工程数据库的设计,在其他应用中 也可以取得较好的效果.如对某连锁店的数据管理中,以EDBMS为基础,结合逻辑层次连接的设计方法,对 其销售数据进行检索处理.将其处理的结果与某大型数据库管理系统(未带加速器情况下)进行了比较.比较 内容有:在销售数据库中检索某商品的销售情况(测试1);在销售数据库中检索出没有销售的商品种类(测 试2).测试的条件分别是:商品数据库4786条记录,75300条销售记录(记为4786/75300);以及商品种类为 18603种,销售记录252885条(记为18603/252885).其销售库的主要结构是:
xsrb{ xssj date not null, /*销售日期*/ spbm char(5) not null, /*商品编码*/ xssl smallfloat, /*销售数量*/ xsje money(12,2), /诚售金额*/ };
其中,某大型数据库系统在商品编码spbm属性上建有索引.而商品库主要结构为:
spb{ spbm char(5), /*商品编码*/ spmc char(20), /*商品名称*/ tm char(12), /*条码*/ };
同样,某大型数据库系统也在商品编码spbm属性上建有索引.而EDBMS未采用索引.
其测试结果如 表1所示.其中带*为某大型数据库系统的测试结果(其运行环境为PC586,UNIX).EDBMS是在Windows95环境 下进行测试的.
表 1 测试结果
测试内容4786/7530018602/252885 测试159秒*1秒缺*1秒 测试2>1小时*2秒缺*8秒5 结束语
工程数据库设计的基础都来自于需求,同时要切合工程实际,在高效可行、符合工程人 员认识水平并易于运用等各方面给予足够的重视.一个好的设计方法可以提高工程数据库设计的质量和效 率,也是工程数据库系统成功的关键之一.基于逻辑层次连接的工程数据库设计模式是从实践中总结出来 的,它能有效的提高数据检索效率.作为一种通用的工程数据库设计方法还需要更多的面向数据库设计的 全过程,在实践中不断提高完善.
篇3:Windows和Linux系统下perl连接SQL Server数据库的方法
这篇文章主要介绍了Windows和Linux系统下perl连接SQL Server数据库的方法,本文详细的讲解了Windows和Linux系统中perl如何连接Microsoft SQL Server数据库,需要的朋友可以参考下
本文将提供一些perl连接Microsoft SQL Server数据库的实例,perl脚本运行在Windows和Linux平台。
Windows平台
如果在Windows平台下运行perl脚本,建议使用依赖DBI的两个模块包,提供标准的数据库接口模块。
DBD::ODBC
DBD::ADO
使用DBD::ODBC
如果选用DBD::ODBC,下面的实例代码将展示如何连接到SQL Server数据库:
代码如下:
use DBI;
# DBD::ODBC
my $dsn = ‘DBI:ODBC:Driver={SQL Server}‘;
my $host = ‘10.0.0.1,1433‘;
my $database = ‘my_database‘;
my $user = ‘sa‘;
my $auth = ‘s3cr3t‘;
# Connect via DBD::ODBC by specifying the DSN dynamically.
my $dbh = DBI->connect(“$dsn;Server=$host;Database=$database”,
$user,
$auth,
{ RaiseError =>1, AutoCommit =>1}
) || die “Database connection not made: $DBI::errstr”;
#Prepare a SQL statement my $sql = “SELECT id, name, phone_number FROM employees ”;
my $sth = $dbh->prepare( $sql );
#Execute the statement
$sth->execute();
my( $id, $name, $phone_number );
# Bind the results to the local variables
$sth->bind_columns( undef, \$id, \$name, \$phone_number );
#Retrieve values from the result set
while( $sth->fetch() ) {
print “$id, $name, $phone_number\n”;
}
#Close the connection
$sth->finish();
$dbh->disconnect();
你还可以使用预先设置的一个系统DSN来连接。要建立一个系统DSN,可以这样访问控制面板->管理工具->数据源。
使用系统DSN连接,需要更改连接字符串。如下所示:
代码如下:
# Connect via DBD::ODBC using a System DSN
my $dbh = DBI->connect(“dbi:ODBC:my_system_dsn”,
$user,
$auth,
{
RaiseError =>1,
AutoCommit =>1
}
) || die “Database connection not made: $DBI::errstr”;
使用DBD::ADO
如果选择DBD::ADO模块,下面的实例展示如何连接到SQL Server数据库。
代码如下:
use DBI;
my $host = ‘10.0.0.1,1433‘;
my $database = ‘my_database‘;
my $user = ‘sa‘;
my $auth = ‘s3cr3t‘;
# DBD::ADO
$dsn = “Provider=sqloledb;Trusted Connection=yes;”;
$dsn .= “Server=$host;Database=$database”;
my $dbh = DBI->connect(“dbi:ADO:$dsn”,
$user,
$auth,
{ RaiseError =>1, AutoCommit =>1}
) || die “Database connection not made: $DBI::errstr”;
#Prepare a SQL statement
my $sql = “SELECT id, name, phone_number FROM employees ”; my $sth = $dbh->prepare( $sql );
#Execute the statement
$sth->execute();
my( $id, $name, $phone_number );
# Bind the results to the local variables
$sth->bind_columns( undef, \$id, \$name, \$phone_number );
#Retrieve values from the result set
while( $sth->fetch() ) {
print “$id, $name, $phone_number\n”;
}
#Close the connection
$sth->finish();
$dbh->disconnect();
Linux平台
如果是在Linux平台下运行perl脚本,连接SQL Server数据库需要使用到DBD::Sybase包,
安装SQL Server支持库
Sybase DBD包依赖FreeTDS驱动程序。
FreeTDS下载地址:www.freetds.org
安装FreeTDS驱动的说明文档参见:www.freetds.org/userguide/config.htm
该驱动没有使用到ODBC.
配置数据源
修改freetds.conf文件包括SQL Server数据库信息,如下所示:
代码如下:
[SS_MY_DB]
host = 10.0.0.1 # or host name port = 1433
tds version = 7.0
安装Sybase DBD模块
该模块文档参见:search.cpan.org/~mewp/DBD-Sybase/Sybase.pm
此外,需要将sybase环境变量应设置为FreeTDS安装路径,export SYBASE=/usr/local/freetds
使用Sybase DBI和SQL Server DSN实例
代码如下:
# load the DBI module
use DBI;
use DBD::Sybase;
my $database=“my_database”;
my $user=“sa”;
my $auth=“s3cr3t”;
BEGIN
{
$ENV{SYBASE} = “/usr/local”;
}
# Connect to the SQL Server Database
my $dbh = DBI->connect(“dbi:Sybase:server=ss_my_db;database=$database”,
$user,
$auth
{RaiseError =>1, AutoCommit =>1}
) || die “Database connection not made: $DBI::errstr”;
#Prepare a SQL statement
my $sql = “SELECT id, name, phone_number FROM employees”;
my $sth = $dbh->prepare( $sql );
#Execute the statement
$sth->execute();
my( $id, $name, $phone_number );
# Bind the results to the local variables
$sth->bind_columns( undef, \$id, \$name, \$phone_number );
#Retrieve values from the result set
while( $sth->fetch() ) { print “$name, $title, $phone\n”;
}
#Close the connection
$sth->finish();
undef $sth; # This fixes a segfault bug with certain versions of DBD::Sybase
$dbh->disconnect();
【IStartupTask连接数据库的方法】相关文章:
5.连接幸福与成功
7.Flex A10如何连接蓝牙设备?Flex A10连接蓝牙方法电脑新手办公/数码
8.数据库应用简历
10.数据库上机心得体会






文档为doc格式