项目结构:

配置文件
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="oracle.manageddataaccess.client"
type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</configSections>
<appSettings>
<!-- 注意(备注):
特别注意 !!!:
导入数据前 需要删掉触发器和序列(Oracle),或 取消自增长ID(SQL Server)
如果导入的数据,没有形成树型结构,子节点和根节点在一个层级。 原因:没有删除触发器和序列(Oracle)或 自增长ID(SQL Server)
1、合同段名称必须统一,Excel后缀名统一为.xlsx ,文件名 节点名 合同段名 三个名字必须一致,方便导入数据
2、Excel附加属性(ExcelAdditionalAttr):
这个属性的更改,需要删除Debug目录下的Cache文件夹,
该字段会影响缓存,可能会导致缓存不是最新!!!,该字段默认为false(默认不启用缓存)
如果需要再新增属性列,需要修改代码的地方(在代码中搜索关键字:Excel附加属性)添加即可
添加Excel附加属性:需添加 中文名(Excel列名) 和 英文名(字段名),一一对应。
列名为:桩号,构件编码 的是属性列,
属性列 只作为 最后节点的属性 存入数据库,不会新建节点
如果最后节点不为属性列,那么每个字段都需要校验,即设置ExcelAdditionalAttr_AllFieldCheck为true即可
ExcelAdditionalAttr_AllFieldCheck属性默认值为true,该属性的意思是,每个字段都校验是否是属性列
Excel附加属性 的 英文名 必须和 类的属性名 一一对应
3、导入数据时替换原始节点:
这个功能本来是有的,后来删掉了该功能,
原因:实际情况较为复杂,有可能是三级节点,有可能是四级节点,
手动在数据库删除节点后,再导入数据,这种方式 较为妥当。
4、触发器和序列命名规则:
如果随意命名,这里的删除和添加触发器的功能(操作类型: 3、4、5)将无法正常使用。只能自己改‘功能3’生成的SQL文件
触发器命名:TR_{TableName}
序列命名:SQ_{TableName}
5、如果导入的数据,没有形成树型结构,子节点和根节点在一个层级。 原因:没有删除触发器和序列(Oracle)或 自增长ID(SQL Server)
6、Excel校验:导入数据前,可先进行数据校验,确保Excel数据无问题。
7、最新版本格式的Excel,列会从‘砼等级’开始过滤(包含砼等级),意思是从‘砼等级’列开始的列,不添加到分部分项
8、删除指定节点的子节点。需保证节点唯一,如果节点不唯一,会抛出异常。
9、 Excel校验内容:
01、隐藏行、隐藏列、
02、行高不足(可配置)
03、列名强制校验(必须包含指定列)
04、单元格为公式
05、构件编码为空
06、构件编码包含中文
07、构件编码重复
08、构件编码过少(可配置数量)
09、同行构件名称重复(子节点和父节点名称相同)
10、构件名称重复
11、首列为空校验,当前行为空则跳过校验
12、单元格缺失数据 或 忘合并的单元格 判断
10、(废弃)注意表结构是否和数据一样,注意一下,看字段“VersionIng”是string类型还是int类型,需要把该字段类型改为和数据库一直就可以了。
11、(废弃)旧表 换为 新表,程序使用了这几个字段(NextId,BiDSion)的地方注释掉了,修改的类:Node.cs、NodeHelper.cs
12、(废弃)切换新表和旧表,需要在程序中切换Model,重新编译
13、添加完分部分项,自动校验构件编码是否都保存到了数据库,前提是开启了附加属性,且Excel有该列
14、导入数据,系统已预设了三个版本,通过修改参数“ExportVersion”来控制
15、注意版本之间的差异,目前有三种导入方式
版本1:城开的那种导入方式
版本2:胡平安那个项目的导入方式
版本3:模板是城开的那种模板,只是在导入的数据上,把Excel的列名附加了进去
-->
<!-- 操作类型:
0:添加初始节点(一二级节点)
1:批量导入合同段数据
2:Excel校验,写入到文件ErrorCell.txt
3:创建SQL脚本 for Oracle数据库的序列和触发器,写入文件SQL_TRIGGER_SEQUENCE.txt
4:删除Oracle数据库的序列和触发器(失效)
5:添加Oracle数据库的序列和触发器(失效)
6:删除指定节点的子节点,多个节点以逗号隔开,如:B2合同段-城开隧道左线,B2合同段-城开隧道右线
-->
<add key="OperationType" value="1"/>
<!-- 要导入的 合同段名称 多个名称以英文半角逗号隔开 -->
<!--<add key="ImportExcelName" value="A2合同段,A3合同段,B1合同段,B2合同段,B3合同段,C1合同段,C2合同段,C3合同段"/>-->
<add key="ImportExcelName" value="A2合同段"/>
<!-- 表名 QMS.TB_PROJECTS TB_PROJECTS -->
<add key="TableName" value="TB_PROJECTS_V2_2"/>
<!-- 数据库类型 0:Oracle 1:SQLServer -->
<add key="SQLType" value="1"/>
<!-- 导入版本 版本号:1、 2、 3 已配置了两个版本 在CommonHelper.cs的Initial方法中查看 已包含了某些属性的初始化 -->
<add key="ExportVersion" value="2"/>
<!-- 删除指定节点的子节点,多个节点以逗号隔开,格式:父节点-子节点 如:B2合同段-城开隧道左线,B2合同段-城开隧道右线 注意:父节点不能含有‘-’,子节点可以有 -->
<add key="DeleteChildNode" value=""/>
<!-- 数据库连接 -->
<add key="OracleConn" value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.98)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=JJJT)));User ID=CMSP;Password=Oracle1;"/>
<add key="SQLServerConn" value="data source=.\sqlexpress;initial catalog=TEST1;user id=sa;password=sa;"/>
<!--<add key="SQLServerConn" value="data source=192.168.2.98;initial catalog=QMS;user id=sa;password=Sql123456;"/>-->
<!-- 下面的配置参数 不需要做调整 -->
<!-- 编码前缀-->
<add key="CodePrefix" value="LZEEE"/>
<!-- Excel附加属性 列名,附加Excel列名 到 字段VersionIng 注意:以前的表无法使用,以前的表冉金海设置成的int类型。设置为false就能兼容以前的表 -->
<add key="ExcelAdditionalAttr_ColumnName" value="false"/>
<!-- 一级节点名称 城开高速公路 重庆城口至开州高速公路-->
<add key="OneLevelName" value="城开高速公路"/>
<!-- 一级节点的ID 添加初始节点时使用 -->
<add key="OneLevelId" value="510321"/>
<!-- 二级节点名称 -->
<add key="TwoLevelNodesName" value="A1合同段,A2合同段,A3合同段,B1合同段,B2合同段,B3合同段,C1合同段,C2合同段,C3合同段"/>
<!-- Excel字段过滤 的起始列名(过滤包含该列) -->
<add key="ExcelFirstFilterAttrName" value="砼等级"/>
<!-- Excel附加属性:是否允许附加属性 注意:这个属性的更改需要删除Debug目录下的Cache文件夹,该字段会影响缓存!!! -->
<add key="ExcelAdditionalAttr" value="true"/>
<!-- Excel附加属性: 中文名(Excel列名) 和 英文名(字段名) -->
<add key="ExcelAdditionalAttr_Cn" value="桩号,构件编码,构件类型,设备编码"/>
<add key="ExcelAdditionalAttr_En" value="MileageNo,NComponentCode,ProjectType,EquCode"/>
<!-- Excel附加属性: 所有字段都校验 校验规则:默认只校验最后一个字段(不含附加属性)。 注意:当附加属性列在中间时,需要设置为true -->
<add key="ExcelAdditionalAttr_AllFieldCheck" value="true"/>
<!-- 保存到数据库 -->
<add key="SaveDB" value="true"/>
<!-- 保存SQL文件 -->
<add key="SaveSQLFile" value="true"/>
<!-- 是否支持 Excel公式 -->
<add key="IsSupportFormula" value="true"/>
<!-- 是否支持 缓存 -->
<add key="IsAllowCache" value="false"/>
<!-- 编码重复判断(很占用时间) -->
<add key="CheckSameCode" value="false"/>
<!-- Excel校验配置项 -->
<!-- Excel必须包含的列 在Excel校验时使用 -->
<add key="ExcelNeedColumn" value="构件名称,构件编码,砼等级"/>
<!-- 最少构件编码数 不足时 在校验Excel时会提醒 -->
<add key="MinCodeNum" value="5"/>
<!-- 最小行高 不足时 在校验Excel时会提醒 -->
<add key="MinRowHeight" value="200"/>
<!-- 是否校验 Excel的构件编码 是否存在 -->
<add key="CheckCodeExist" value="false"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.ManagedDataAccess.Client"/>
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
</system.data>
<!--<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<publisherPolicy apply="no"/>
<assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/>
<bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>-->
<!--<oracle.manageddataaccess.client>
<version number="*">
<dataSources>
<dataSource alias="SampleDataSource"
descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) "/>
</dataSources>
</version>
</oracle.manageddataaccess.client>-->
</configuration>