Beispiel #1
0
        private IDataCommand ResolveCommand(XmlReader reader, MetadataFile provider, string @namespace, Action unrecognize)
        {
            //创建命令元素对象
            var command = new MetadataCommand(provider,
                                              this.GetFullName(reader.GetAttribute(XML_NAME_ATTRIBUTE), @namespace),
                                              reader.GetAttribute(XML_ALIAS_ATTRIBUTE))
            {
                Type       = this.GetAttributeValue(reader, XML_TYPE_ATTRIBUTE, DataCommandType.Procedure),
                Alias      = this.GetAttributeValue <string>(reader, XML_ALIAS_ATTRIBUTE),
                Mutability = this.GetAttributeValue(reader, XML_MUTABILITY_ATTRIBUTE, CommandMutability.Delete | CommandMutability.Insert | CommandMutability.Update),
            };

            int depth = reader.Depth;
            var path  = reader.GetAttribute(XML_PATH_ATTRIBUTE);

            while (reader.Read() && reader.Depth > depth)
            {
                if (reader.NodeType != XmlNodeType.Element)
                {
                    continue;
                }

                switch (reader.LocalName)
                {
                case XML_PARAMETER_ELEMENT:
                    var parameter = new MetadataCommandParameter(command, reader.GetAttribute(XML_NAME_ATTRIBUTE), this.GetDbType(this.GetAttributeValue <string>(reader, XML_TYPE_ATTRIBUTE)))
                    {
                        Direction = this.GetAttributeValue(reader, XML_DIRECTION_ATTRIBUTE, value => GetDirection(value)),
                        Alias     = this.GetAttributeValue <string>(reader, XML_ALIAS_ATTRIBUTE),
                        Length    = this.GetAttributeValue <int>(reader, XML_LENGTH_ATTRIBUTE),
                        Value     = this.GetAttributeValue <object>(reader, XML_VALUE_ATTRIBUTE),
                    };

                    //将解析成功的命令参数元素加入到命令的参数集合
                    command.Parameters.Add(parameter);

                    break;

                case XML_SCRIPT_ELEMENT:
                    var driver = reader.GetAttribute(XML_DRIVER_ATTRIBUTE);

                    if (reader.Read() && (reader.NodeType == XmlNodeType.Text || reader.NodeType == XmlNodeType.CDATA))
                    {
                        command.Scriptor.SetScript(driver, reader.Value);
                    }

                    break;

                default:
                    unrecognize();
                    break;
                }
            }
Beispiel #2
0
        private IDataCommand ResolveCommand(XmlReader reader, MetadataFile provider, string @namespace, Action unrecognize)
        {
            //创建命令元素对象
            var command = new MetadataCommand(provider,
                                              this.GetFullName(reader.GetAttribute(XML_NAME_ATTRIBUTE), @namespace),
                                              reader.GetAttribute(XML_ALIAS_ATTRIBUTE))
            {
                Type = this.GetAttributeValue(reader, XML_TYPE_ATTRIBUTE, DataCommandType.Procedure),
                Text = this.GetAttributeValue <string>(reader, XML_TEXT_ATTRIBUTE),
            };

            int depth = reader.Depth;

            while (reader.Read() && reader.Depth > depth)
            {
                if (reader.NodeType != XmlNodeType.Element)
                {
                    continue;
                }

                switch (reader.LocalName)
                {
                case XML_PARAMETER_ELEMENT:
                    var parameter = new MetadataCommandParameter(command, reader.GetAttribute(XML_NAME_ATTRIBUTE), this.GetAttributeValue <Type>(reader, XML_TYPE_ATTRIBUTE))
                    {
                        Direction = this.GetAttributeValue(reader, XML_DIRECTION_ATTRIBUTE, System.Data.ParameterDirection.Input),
                        Alias     = this.GetAttributeValue <string>(reader, XML_ALIAS_ATTRIBUTE),
                        Length    = this.GetAttributeValue <int>(reader, XML_LENGTH_ATTRIBUTE),
                        Value     = this.GetAttributeValue <object>(reader, XML_VALUE_ATTRIBUTE),
                    };

                    //将解析成功的命令参数元素加入到命令的参数集合
                    command.Parameters.Add(parameter);

                    break;

                case XML_TEXT_ELEMENT:
                    if (reader.NodeType == XmlNodeType.CDATA || reader.NodeType == XmlNodeType.Text)
                    {
                        command.Text = reader.Value;
                    }

                    break;

                default:
                    unrecognize();
                    break;
                }
            }

            return(command);
        }