## SQLSet工具基本说明
> 工具名称:SQLSet
> 支持的数据库类型:SQLServer\MySQL
SQLSet工具主要用于目前云库在实施过程中的初始化。主要功能核心为:执行指定目录中的SQL文件。其基本过程如下:
1. 在执行SQL文件前,整理并构建相应的SQL参数;
2. 获取所要执行的SQL文件列表;
3. 根据SQL文件列表,循环读取SQL文件中的内容;
4. 传入参数列表,并执行该SQL文件内容;
5. 读取并执行所有SQL文件列表后,返回执行结果。
## 工具配置文件
### 配置文件样例
<config sql-type="mysql">
<group name="初始化">
<action key="init-key-value" name="初始化键值" do-step="exec-sql" />
<action key="clean-permission" name="清洗权限" do-step="exec-sql" />
</group>
<group name="商品">
<action key="import-items" name="导入商品" do-step="select-file,exec-sql" file-filter="Excel Files | *.xls" sql-folder="../import-folder">
<parameter key="AllowOverwriteExistsItem" name="是否覆盖已存在的商品" value="true" data-type="bool" />
<parameter key="AutoBuildItemNumber" name="是否自动创建商品的编号" value="false" data-type="bool" />
<parameter key="NumberPrefixString" name="商品编号的前缀字符串" value="" data-type="string" />
<parameter key="NumberSequanceLength" name="商品编号的前缀字符串" value="4" data-type="numeric" />
</action>
</group>
</config>
### 配置文件结构说明
* `config`:配置文件跟元素
* `@sql-type`:当前所使用的数据库类型。目前支持以下几种数据库类型:
* msql:Microsoft SQL Server
* mysql:MySQL
* `config/group`:操作分组定义
* `@name`:分组的名称,用于在界面中显示相应的名称
* `config/group/action`:操作定义
* `@key`:操作的标识,用于构建后续的相应的数据结构(参见下文)
* `@name`:操作的名称,用于在界面中显示相应的名称
* `@do-step`:操作步骤,多个操作使用逗号分隔,如:select-file,do-sql。在定义中,目前支持一下几种:
* select-file:打开一个FileBrowser,用于选择一个文件;
* exec-sql:执行规定文件夹中的所有SQL文件,文件夹的约定为:默认为当前程序目录下的ActionKey目录,如:./import-items;若action节点中,定义了@sql-folder属性,则为该属性所指定的SQL目录。
* `@file-filter`:文件类型过滤调条件(仅适用于select-filter操作)
* `@sql-folder`:SQL文件的所在目录(仅适用于exec-sql操作)
* `config/group/action/parameter`:操作参数
* `@key`:参数标识,用于构建SQLParameter的名称
* `@name`:参数名称,用于在界面中显示相应的名称
* `@value`:参数的默认值
* `@data-type`:参数类型,numeric\string\bool\datetime共有四个参数数据类型
## 配置文件的使用过程
### 界面的创建
1. 程序启动后,读取并加载配置文件。配置文件所在目录为当前的应用程序目录,配置文件的文件名为:sqlset.xml;
2. 根据config/group中的定义,动态创建Group控件,并使用@name作为Group控件的名称;
3. 在各个config/group中,根据config/group/action的定义,动态创建Button控件(操作按钮),并使用@name作为Button控件的名称;
### 操作的执行
1. 用户点击操作按钮后,读取config/group/action/parameter列表,并动态创建参数输入界面,供用户输入并确认并参数值;
2. 读取config/group/action/@do-step属性,并通过逗号对属性值进行splite操作;
3. 根据@do-step的定义,循环执行所有step;
4. 执行结束后,提示执行结果。
所支持的step如下:
#### select-file
1. 打开一个OpenFileDialog,并设置相应的FileFilter属性后,供用户选择文件;
2. 若用户选择确认后,以SelectedFile作为参数,进行保存,并作为后续的SQL执行参数;
3. 若用户取消操作,则整个操作取消。
#### exec-sql
1. 获取SQL文件所在的目录后,获取所要执行的SQL文件列表;文件夹获取方式的约定为:默认为当前程序目录下的ActionKey目录,如:./import-items;若action节点中,定义了@sql-folder属性,则为该属性所指定的SQL目录;
3. 根据SQL文件列表,循环读取SQL文件中的内容;
4. 传入前序步骤所构建的参数列表,并执行该SQL文件内容(执行SQL需支持事务);
5. 读取并执行所有SQL文件列表后,返回执行结果。