public override bool LoadFromConfig(XmlNode node) { try { var level0Item = (XmlElement)node; if (level0Item.HasAttribute("NeedDataSync")) { var strNeedDataSync = level0Item.GetAttribute("NeedDataSync"); _needDataSync = (strNeedDataSync.ToLower() == "true"); if (_needDataSync) { Log.Info("DBQuery资源启动冗余同步。"); } } var level1Node = node.SelectSingleNode("//DBConnection"); if (level1Node != null) { var level1Item = (XmlElement)level1Node; //string Name = level1_item.GetAttribute("Name"); var dbType = DataBaseHelper.ConvertDatabaseType(level1Item.GetAttribute("DBType")); var connStr = level1Item.GetAttribute("ConnectionString"); _dbConn = new DataBaseHelper(dbType, connStr); } return(true); } catch (Exception ex) { Log.Error("装载DBQuery配置出错:" + ex); return(false); } }
// 装载入口 public static void LoadConfig(string configFile) { try { // loading from xml file var doc = new XmlDocument(); doc.Load(configFile); // load configuration var configs = doc.SelectSingleNode("root/Configs"); if (null != configs) { foreach (var item in configs.Cast <XmlNode>().Where(item => item.NodeType != XmlNodeType.Comment)) { if (item.Name == "Redundancy") // Get redundancy config -- Dongmin 20180319 { var redundancy = (XmlElement)item; if (redundancy.HasAttribute("Enable")) { var strEnableRedundancy = redundancy.GetAttribute("Enable"); ResourceManager.EnableRedundancy = strEnableRedundancy.ToLower() == "true"; } } else if (item.Name == "DBConnection") { var dbConfig = (XmlElement)item; if (dbConfig.HasAttribute("Name") && dbConfig.HasAttribute("Type") && dbConfig.HasAttribute("ConnectionString")) { var name = dbConfig.GetAttribute("Name"); var type = DataBaseHelper.ConvertDatabaseType(dbConfig.GetAttribute("Type")); if (DataBaseHelper.NameType.Keys.Contains(name)) { continue; } var connectionStr = dbConfig.GetAttribute("ConnectionString"); DataBaseHelper.NameType.Add(name, type); DataBaseHelper.NameConnStr.Add(name, connectionStr); } else { throw new Exception("数据库配置错误,缺少Name,Type或ConnectionString"); } } else { throw new Exception("该节点不识别:" + item.Name); } } } // Load Custom values var customValues = doc.SelectSingleNode("root/CustomTypes"); if (null != customValues) { foreach (XmlNode item in customValues) { if (item.NodeType == XmlNodeType.Comment) { continue; } // 装载自定义类型 -- Dongmin 20180602 // 装载所有实现了ICustomType接口的类型 -- 孙健 2020-07 CustomTypeManager.LoadCustomTypesInConfig(item); } } // Load Resources var resources = doc.SelectSingleNode("root/Resources"); if (resources != null) { foreach (XmlNode item in resources) { if (item.NodeType == XmlNodeType.Comment) { continue; } ResourceManager.LoadResourceInConfig(item, configFile, doc); } } } catch (Exception ex) { Log.Error($"装载配置文件{configFile}失败{ex.Message}"); } }
public bool LoadFromConfig(XmlNode node) { try { var level0Item = (XmlElement)node; var strType = level0Item.GetAttribute("LinkType"); //string strDestTable = string.Empty; //string strSourceTable = string.Empty; //if (level0_item.HasAttribute("DestTable")) //{ // strDestTable = level0_item.GetAttribute("DestTable"); //} //if (level0_item.HasAttribute("SourceTable")) //{ // strSourceTable = level0_item.GetAttribute("SourceTable"); //} // create data set switch (strType.ToLower()) { case "tagtodb": /*_source = new BindingTags(); * _dest = new BindingDBFields();*///todo:group tag _linkType = BindingType.TagToDB; //((BindingDBFields)_dest).TableName = strDestTable; break; case "dbtotag": /*_source = new BindingDBFields(); * _dest = new BindingTags();*/ _linkType = BindingType.DBToTag; //((BindingDBFields)_source).TableName = strSourceTable; break; case "dbtodb": _source = new GroupBindingDbFields(); _dest = new GroupBindingDbFields(); _linkType = BindingType.DBToDB; //((BindingDBFields)_source).TableName = strSourceTable; //((BindingDBFields)_dest).TableName = strDestTable; break; case "tagtotag": /*_source = new BindingTags(); * _dest = new BindingTags();*/ _linkType = BindingType.TagToTag; break; case "jsontexttodb": /*_source = new BindingJsonFields(); * _dest = new BindingDBFields();*///todo: group json text _linkType = BindingType.JsonTextToDb; break; } foreach (XmlNode level1Node in node) { // level1 -- "Fields", "Actions" if (level1Node.NodeType == XmlNodeType.Comment) { continue; } var level1Item = (XmlElement)level1Node; switch (level1Item.Name.ToLower()) { case "dbsourceselect": { var dbConnNode = level1Node.SelectSingleNode("DBConnection"); if (dbConnNode != null) { var dbConnItem = (XmlElement)dbConnNode; ((GroupBindingDbFields)_source).DbType = DataBaseHelper.ConvertDatabaseType(dbConnItem.GetAttribute("Type")); ((GroupBindingDbFields)_source).ConnectionString = dbConnItem.GetAttribute("ConnectionString"); } // Data table load if (level1Item.HasAttribute("DBTable")) { ((GroupBindingDbFields)_source).TableName = level1Item.GetAttribute("DBTable"); } var strDbField = level1Item.GetAttribute("DBField"); ((GroupBindingDbFields)_source).SourceDbField = strDbField; if (level1Item.HasAttribute("FieldType")) { ((GroupBindingDbFields)_source).SourceBindingFieldType = level1Item.GetAttribute("FieldType").ToLower(); if (level1Item.GetAttribute("FieldType").ToLower() == "int") { int.TryParse(level1Item.GetAttribute("FromNumber"), out var fromNumber); int.TryParse(level1Item.GetAttribute("ToNumber"), out var toNumber); ((GroupBindingDbFields)_source).SourceStartNumber = fromNumber; ((GroupBindingDbFields)_source).SourceEndNumber = toNumber; } else if (level1Item.GetAttribute("FieldType").ToLower() == "datetime") { DateTime.TryParse(level1Item.GetAttribute("FromDate"), out var fromDateTime); DateTime.TryParse(level1Item.GetAttribute("ToDate"), out var toDateTime); ((GroupBindingDbFields)_source).SourceStartDateTime = fromDateTime; ((GroupBindingDbFields)_source).SourceEndDateTime = toDateTime; } } break; } /* * case "jsonsourceselect": * { * //< DBSourceSelect DBField = "Compare" ConditionType = "Min" /> * * // DB connection load -- David 20191112 * XmlNode jsonFilePathNode = level1Node.SelectSingleNode("JsonFilePath"); * if (jsonFilePathNode != null) * { * XmlElement filePathNode = (XmlElement)jsonFilePathNode; * ((BindingJsonFields)_source).FilePath = filePathNode.GetAttribute("FilePath"); * } * * // Data table load * if (level1Item.HasAttribute("ArrayName")) * { * ((BindingJsonFields)_source).ArrayName = level1Item.GetAttribute("ArrayName"); * } * * string strDBField = level1Item.GetAttribute("JsonField"); * string strConditionType = level1Item.GetAttribute("ConditionType"); * * SourceConditionType _type = SourceConditionType.Max; * switch (strConditionType.ToLower()) * { * case "equal": * _type = SourceConditionType.Equal; * break; * case "max": * _type = SourceConditionType.Max; * break; * case "min": * _type = SourceConditionType.Min; * break; * } * * var strConditionValue = string.Empty; * if (level1Item.HasAttribute("ConditionValue")) * { * strConditionValue = level1Item.GetAttribute("ConditionValue"); * } * * if (_linkType != BindingType.JsonTextToDb) continue; * ((BindingJsonFields)_source).SourceConditionJsonField = strDBField; * ((BindingJsonFields)_source).SourceConditionType = _type; * if (_type == SourceConditionType.Equal) * ((BindingJsonFields)_source).SourceConditionValue = strConditionValue; * break; * } */ case "dbdestselect": { //todo: 还有一个OperateType属性,用于后期拓展其他功能。 //< DBDestSelect DBField = "Compare2" ConditionValueType = "int16" ConditionValue = "65" /> // DB connection load -- David 20191112 var dbConnNode = level1Node.SelectSingleNode("DBConnection"); if (dbConnNode != null) { var dbConnItem = (XmlElement)dbConnNode; ((GroupBindingDbFields)_dest).DbType = DataBaseHelper.ConvertDatabaseType(dbConnItem.GetAttribute("Type")); ((GroupBindingDbFields)_dest).ConnectionString = dbConnItem.GetAttribute("ConnectionString"); } // Data table load if (level1Item.HasAttribute("DBTable")) { ((GroupBindingDbFields)_dest).TableName = level1Item.GetAttribute("DBTable"); } ((GroupBindingDbFields)_dest).DestinationDbField = level1Item.GetAttribute("DBField"); if (level1Item.HasAttribute("FieldType")) { ((GroupBindingDbFields)_dest).DestinationBindingFieldType = level1Item.GetAttribute("FieldType").ToLower(); if (level1Item.GetAttribute("FieldType").ToLower() == "int") { int.TryParse(level1Item.GetAttribute("FromNumber"), out var fromNumber); int.TryParse(level1Item.GetAttribute("ToNumber"), out var toNumber); ((GroupBindingDbFields)_dest).DestinationStartNumber = fromNumber; ((GroupBindingDbFields)_dest).DestinationEndNumber = toNumber; } else if (level1Item.GetAttribute("FieldType").ToLower() == "datetime") { } } break; } case "bindingitems": { foreach (XmlNode level2Node in level1Node) { // datasource if (level2Node.NodeType == XmlNodeType.Comment) { continue; } var level2Item = (XmlElement)level2Node; if (level2Item.Name.ToLower() != "bindingitem") { continue; } string strMachine; string strTag; string strDBField; string strDBField2; string strDBFieldType; string strJsonField; switch (_linkType) { case BindingType.DBToDB: //strMachine = level2_item.GetAttribute("Machine"); //strTag = level2_item.GetAttribute("Tag"); strDBField = level2Item.GetAttribute("SourceDBField"); strDBField2 = level2Item.GetAttribute("DestDBField"); strDBFieldType = level2Item.GetAttribute("DBFieldType"); _source.AddItem(new DBFieldBindingItem(strDBField, strDBFieldType)); _dest.AddItem(new DBFieldBindingItem(strDBField2, strDBFieldType)); break; case BindingType.DBToTag: /* * strMachine = level2_item.GetAttribute("Machine"); * strTag = level2_item.GetAttribute("Tag"); * strDBField = level2_item.GetAttribute("DBField"); ; * strDBFieldType = level2_item.GetAttribute("DBFieldType"); * * //machine = (Machine)ResourceManager.GetResource(strMachine); * //tag = machine.GetTag(strTag); * * _source.AddItem(new DBFieldBindingItem(strDBField, strDBFieldType)); * _dest.AddItem(new MachineBindingItem(strMachine, strTag)); */ break; case BindingType.TagToDB: /*strMachine = level2_item.GetAttribute("Machine"); * strTag = level2_item.GetAttribute("Tag"); * strDBField = level2_item.GetAttribute("DBField"); * strDBFieldType = level2_item.GetAttribute("DBFieldType"); * * //machine = (Machine)ResourceManager.GetResource(strMachine); * //tag = machine.GetTag(strTag); * * _source.AddItem(new MachineBindingItem(strMachine, strTag)); * _dest.AddItem(new DBFieldBindingItem(strDBField, strDBFieldType));*/ break; case BindingType.JsonTextToDb: /*strJsonField = level2_item.GetAttribute("SourceJsonField"); * strDBField2 = level2_item.GetAttribute("DestDBField"); * strDBFieldType = level2_item.GetAttribute("DBFieldType"); * * _source.AddItem(new JsonBindingItem(strJsonField)); * _dest.AddItem(new DBFieldBindingItem(strDBField2, strDBFieldType));*/ break; case BindingType.TagToTag: /*string strSourceMachine = level2_item.GetAttribute("SourceMachine"); * string strDestMachine = level2_item.GetAttribute("DestMachine"); * string strSourceTag = level2_item.GetAttribute("SourceTag"); * string strDestTag = level2_item.GetAttribute("DestTag"); * * _source.AddItem(new MachineBindingItem(strSourceMachine, strSourceTag)); * _dest.AddItem(new MachineBindingItem(strDestMachine, strDestTag));*/ break; default: throw new ArgumentOutOfRangeException(); } } break; } } } Log.Info("装载GroupDbBinding配置成功"); return(true); } catch (Exception ex) { Log.Error("装载GroupDbBinding配置出错:" + ex); return(false); } }
// 装载入口 private static void LoadConfig(string configFile) { try { // loading from xml file var doc = new XmlDocument(); // Ignore Comments doc.Load(XmlReader.Create(configFile, new XmlReaderSettings { IgnoreComments = true })); // load configuration var configs = doc.SelectSingleNode("root/Configs"); if (null != configs) { foreach (XmlNode item in configs) { if (item.NodeType == XmlNodeType.Comment) { continue; } if (item.Name == "Redundancy") // Get redundancy config -- Dongmin 20180319 { var redundancy = (XmlElement)item; if (redundancy.HasAttribute("Enable")) { var strEnableRedundancy = redundancy.GetAttribute("Enable"); EnableRedundancy = strEnableRedundancy.ToLower() == "true"; } //增加xml冗余同步时间修改功能 --- jiansun 2019-11-10 if (redundancy.HasAttribute("SyncInterval")) { var strSyncInterval = redundancy.GetAttribute("SyncInterval"); _resetNewRedundancySyncInterval = true; _redundancySyncInterval = strSyncInterval; } } else if (item.Name == "DBConnection") { var dbConfig = (XmlElement)item; if (dbConfig.HasAttribute("Name") && dbConfig.HasAttribute("Type") && dbConfig.HasAttribute("ConnectionString")) { //DataBaseHelperNew.LoadFromConfig(item); var name = dbConfig.GetAttribute("Name"); var type = DataBaseHelper.ConvertDatabaseType(dbConfig.GetAttribute("Type")); if (DataBaseHelper.NameType.Keys.Contains(name)) { continue; } var connectionStr = dbConfig.GetAttribute("ConnectionString"); DataBaseHelper.NameType.Add(name, type); DataBaseHelper.NameConnStr.Add(name, connectionStr); } else { throw new Exception("数据库配置错误,缺少Name,Type或ConnectionString"); } } else { throw new Exception("该节点不识别:" + item.Name); } } } // Load Custom values var customValues = doc.SelectSingleNode("root/CustomizedTypes"); if (null != customValues) { foreach (XmlNode item in customValues) { if (item.NodeType == XmlNodeType.Comment) { continue; } // 装载自定义类型 -- Dongmin 20180602 if (!CustomTypeManager.LoadCustomTypesInConfig(item)) { continue; } } } // Load Resources var resources = doc.SelectSingleNode("root/Resources"); if (resources != null) { foreach (XmlNode item in resources) { if (item.NodeType == XmlNodeType.Comment) { continue; } //sunjian 2019-12-24 增加ResourceTemplate模板的配置。 //Resource Template必须在其他资源前面定义 //todo: Xml配置合法性检测必须要检查Resource Template的定义位置。 if (item.Name.ToLower() == "resource" + "templates") { foreach (var xmlElement in item.Cast <XmlNode>() .Where(xmlElement => xmlElement.NodeType != XmlNodeType.Comment)) { LoadResourceTemplateInConfig((XmlElement)xmlElement); } continue; } if (!LoadResourceInConfig(item, configFile, doc)) { continue; } } } } catch (Exception ex) { Log.Error($"装载配置文件{configFile}失败{ex.Message}"); } }
//public string ClassName //{ // get { return "DBBinding"; } //} /// <summary> /// Created by Dongmin at 20180129 // <Resource Type = "DataBinding" Name="DBLink1" LinkType="DBToTag" SourceTable="testtable1" Enable="false" > // <BindingItems> // <BindingItem Machine = "BTSTester" Tag="D1" DBField="column_1"/> // <BindingItem Machine = "BTSTester" Tag="D2" DBField="column_2"/> // </BindingItems> //</Resource> //<Resource Type = "DataBinding" Name="DBLink2" LinkType="TagToDB" DestTable="testtable1" Enable="false" > // <BindingItems> // <BindingItem Machine = "BTSTester" Tag="D1" DBField="column_1"/> // <BindingItem Machine = "BTSTester" Tag="D2" DBField="column_2"/> // </BindingItems> //</Resource> //<Resource Type = "DataBinding" Name="DBLink3" LinkType="DBToDB" SourceTable="testtable1" DestTable="testtable2" Enable="true" > // <BindingItems> // <BindingItem SourceDBField = "column_1" DestDBField="column_1"/> // <BindingItem SourceDBField = "column_2" DestDBField="column_2"/> // </BindingItems> //</Resource> public override bool LoadFromConfig(XmlNode node) { try { var level0Item = (XmlElement)node; var strType = level0Item.GetAttribute("LinkType"); //string strDestTable = string.Empty; //string strSourceTable = string.Empty; //if (level0_item.HasAttribute("DestTable")) //{ // strDestTable = level0_item.GetAttribute("DestTable"); //} //if (level0_item.HasAttribute("SourceTable")) //{ // strSourceTable = level0_item.GetAttribute("SourceTable"); //} // create data set switch (strType.ToLower()) { case "tagtodb": _source = new BindingTags(); _dest = new BindingDbFields(); _linkType = BindingType.TagToDB; //((BindingDBFields)_dest).TableName = strDestTable; break; case "dbtotag": _source = new BindingDbFields(); _dest = new BindingTags(); _linkType = BindingType.DBToTag; //((BindingDBFields)_source).TableName = strSourceTable; break; case "dbtodb": _source = new BindingDbFields(); _dest = new BindingDbFields(); _linkType = BindingType.DBToDB; //((BindingDBFields)_source).TableName = strSourceTable; //((BindingDBFields)_dest).TableName = strDestTable; break; case "tagtotag": _source = new BindingTags(); _dest = new BindingTags(); _linkType = BindingType.TagToTag; break; case "jsontexttodb": _source = new BindingJsonFields(); _dest = new BindingDbFields(); _linkType = BindingType.JsonTextToDb; break; } foreach (XmlNode level1Node in node) { // level1 -- "Fields", "Actions" if (level1Node.NodeType == XmlNodeType.Comment) { continue; } var level1Item = (XmlElement)level1Node; if (level1Item.Name.ToLower() == "dbsourceselect") { //< DBSourceSelect DBField = "Compare" ConditionType = "Min" /> // DB connection load -- David 20191112 var dbconnNode = level1Node.SelectSingleNode("DBConnection"); /*sunjian 2019-11-16 多写了两个\\,搜索结果是父对象下的node*/ if (dbconnNode != null) { var dbconnItem = (XmlElement)dbconnNode; ((BindingDbFields)_source).DbType = DataBaseHelper.ConvertDatabaseType(dbconnItem.GetAttribute("Type")); ((BindingDbFields)_source).ConnectionString = dbconnItem.GetAttribute("ConnectionString"); } // Data table load if (level1Item.HasAttribute("DBTable")) { ((BindingDbFields)_source).TableName = level1Item.GetAttribute("DBTable"); } var strDbField = level1Item.GetAttribute("DBField"); var strConditionType = level1Item.GetAttribute("ConditionType"); var type = SourceConditionType.Max; switch (strConditionType.ToLower()) { case "equal": type = SourceConditionType.Equal; break; case "max": type = SourceConditionType.Max; break; case "min": type = SourceConditionType.Min; break; } var strConditionValue = string.Empty; var strConditionValueType = string.Empty; if (level1Item.HasAttribute("ConditionValue")) { strConditionValue = level1Item.GetAttribute("ConditionValue"); strConditionValueType = level1Item.GetAttribute("ConditionValueType"); } if (type == SourceConditionType.Max || type == SourceConditionType.Min) { if (!level1Item.HasAttribute("ConditionValueType")) { throw new Exception( $"配置文件中数据库数据绑定{DbBindingName}限定条件为Max或Min,必须给定字段类型SourceDbFieldType和DestDbFieldType"); } if (level1Item.GetAttribute("ConditionValueType") == "string") { throw new Exception("元数据DBField是字符串类型,执行Max操作将导致排序不准确,请选择数字/日期/bool等类型字段进行Max操作。"); } /*执行最大最小操作时需要保证字段为数字格式,否则字符串格式的数字排序最大值一定是9开头的数字。 jiansun 2019-11-18*/ } switch (_linkType) { case BindingType.DBToTag: case BindingType.DBToDB: { ((BindingDbFields)_source).SourceConditionDbField = strDbField; ((BindingDbFields)_source).SourceConditionType = type; if (type == SourceConditionType.Equal) { ((BindingDbFields)_source).SourceConditionValue = strConditionValueType.ToLower() == "string" ? $"'{Parameter.CreateValueFromString(strConditionValueType, strConditionValue)}'" : Parameter.CreateValueFromString(strConditionValueType, strConditionValue); } break; } } } else if (level1Item.Name.ToLower() == "jsonsourceselect") { //< DBSourceSelect DBField = "Compare" ConditionType = "Min" /> // DB connection load -- David 20191112 var jsonFilePathNode = level1Node.SelectSingleNode("JsonFilePath"); if (jsonFilePathNode != null) { var filePathNode = (XmlElement)jsonFilePathNode; ((BindingJsonFields)_source).FilePath = filePathNode.GetAttribute("FilePath"); } // Data table load if (level1Item.HasAttribute("ArrayName")) { ((BindingJsonFields)_source).ArrayName = level1Item.GetAttribute("ArrayName"); } var strDBField = level1Item.GetAttribute("JsonField"); var strConditionType = level1Item.GetAttribute("ConditionType"); var _type = SourceConditionType.Max; switch (strConditionType.ToLower()) { case "equal": _type = SourceConditionType.Equal; break; case "max": _type = SourceConditionType.Max; break; case "min": _type = SourceConditionType.Min; break; } var strConditionValue = string.Empty; if (level1Item.HasAttribute("ConditionValue")) { strConditionValue = level1Item.GetAttribute("ConditionValue"); } if (_linkType != BindingType.JsonTextToDb) { continue; } ((BindingJsonFields)_source).SourceConditionJsonField = strDBField; ((BindingJsonFields)_source).SourceConditionType = _type; if (_type == SourceConditionType.Equal) { ((BindingJsonFields)_source).SourceConditionValue = strConditionValue; } } else if (level1Item.Name.ToLower() == "dbdestselect") { //< DBDestSelect DBField = "Compare2" ConditionValueType = "int16" ConditionValue = "65" /> // DB connection load -- David 20191112 var dbconnNode = level1Node.SelectSingleNode("DBConnection"); /*sunjian 2019-11-16 多写了两个\\,搜索结果是父对象下的node*/ if (dbconnNode != null) { var dbconnItem = (XmlElement)dbconnNode; ((BindingDbFields)_dest).DbType = DataBaseHelper.ConvertDatabaseType(dbconnItem.GetAttribute("Type")); ((BindingDbFields)_dest).ConnectionString = dbconnItem.GetAttribute("ConnectionString"); } // Data table load if (level1Item.HasAttribute("DBTable")) { ((BindingDbFields)_dest).TableName = level1Item.GetAttribute("DBTable"); } ((BindingDbFields)_dest).DestConditionDBField = level1Item.GetAttribute("DBField"); ((BindingDbFields)_dest).DestConditionValueType = level1Item.GetAttribute("ConditionValueType"); ((BindingDbFields)_dest).DestConditionValue = level1Item.GetAttribute("ConditionValue"); var strOperateType = level1Item.GetAttribute("OperateType"); switch (strOperateType.ToLower()) { case "update": ((BindingDbFields)_dest).DestOperateType = DestOperateType.Update; break; case "insert": ((BindingDbFields)_dest).DestOperateType = DestOperateType.Insert; break; } } else if (level1Item.Name.ToLower() == "bindingitems") { foreach (XmlNode level2Node in level1Node) { // datasource if (level2Node.NodeType == XmlNodeType.Comment) { continue; } var level2Item = (XmlElement)level2Node; if (level2Item.Name.ToLower() == "bindingitem") { string strMachine; string strTag; string strDBField; string strDBField2; string strDBFieldType; string strJsonField; Machine machine = null; switch (_linkType) { case BindingType.DBToDB: strDBField = level2Item.GetAttribute("SourceDBField"); strDBField2 = level2Item.GetAttribute("DestDBField"); strDBFieldType = level2Item.GetAttribute("DBFieldType"); _source.AddItem(new DbFieldBindingItem(strDBField, strDBFieldType)); _dest.AddItem(new DbFieldBindingItem(strDBField2, strDBFieldType)); break; case BindingType.DBToTag: strMachine = level2Item.GetAttribute("Machine"); strTag = level2Item.GetAttribute("Tag"); strDBField = level2Item.GetAttribute("DBField"); strDBFieldType = level2Item.GetAttribute("DBFieldType"); _source.AddItem(new DbFieldBindingItem(strDBField, strDBFieldType)); _dest.AddItem(new MachineBindingItem(strMachine, strTag)); break; case BindingType.TagToDB: strMachine = level2Item.GetAttribute("Machine"); strTag = level2Item.GetAttribute("Tag"); strDBField = level2Item.GetAttribute("DBField"); strDBFieldType = level2Item.GetAttribute("DBFieldType"); _source.AddItem(new MachineBindingItem(strMachine, strTag)); _dest.AddItem(new DbFieldBindingItem(strDBField, strDBFieldType)); break; case BindingType.JsonTextToDb: strJsonField = level2Item.GetAttribute("SourceJsonField"); strDBField2 = level2Item.GetAttribute("DestDBField"); strDBFieldType = level2Item.GetAttribute("DBFieldType"); _source.AddItem(new JsonBindingItem(strJsonField)); _dest.AddItem(new DbFieldBindingItem(strDBField2, strDBFieldType)); break; case BindingType.TagToTag: var strSourceMachine = level2Item.GetAttribute("SourceMachine"); var strDestMachine = level2Item.GetAttribute("DestMachine"); var strSourceTag = level2Item.GetAttribute("SourceTag"); var strDestTag = level2Item.GetAttribute("DestTag"); _source.AddItem(new MachineBindingItem(strSourceMachine, strSourceTag)); _dest.AddItem(new MachineBindingItem(strDestMachine, strDestTag)); break; } } } } } Log.Info("装载DBBindding配置成功"); return(true); } catch (Exception ex) { Log.Error("装载DBBindding配置出错:" + ex); return(false); } }