Example #1
0
        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}");
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        // 装载入口
        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}");
            }
        }
Example #5
0
        //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);
            }
        }