public override object this[int ordinal]
        {
            get
            {
                TableStorageField field = m_Current[ordinal];

                return(field.Value);
            }
        }
        public override object this[string name]
        {
            get
            {
                TableStorageField field = m_Current[name];

                return(field.Value);
            }
        }
        public override long GetBytes(int ordinal, long dataOffset, byte[] buffer, int bufferOffset, int length)
        {
            TableStorageField field = m_Current[ordinal];
            Stream            data  = (Stream)field.Value;

            data.Seek(dataOffset, SeekOrigin.Begin);

            return(data.Read(buffer, bufferOffset, length));
        }
        private void ReadNext()
        {
            m_Next = null;

            if (m_Reader != null)
            {
                if (m_Reader.ReadToFollowing("entry", TableStorageConstants.Atom.NAMESPACE))
                {
                    m_Reader.ReadStartElement("entry", TableStorageConstants.Atom.NAMESPACE);

                    if (m_Reader.ReadToFollowing("properties", TableStorageConstants.Edm.NAMESPACE))
                    {
                        m_Reader.ReadStartElement("properties", TableStorageConstants.Edm.NAMESPACE);

                        m_Next = new TableStorageFieldCollection();

                        while (m_Reader.IsStartElement())
                        {
                            bool   isEmpty      = m_Reader.IsEmptyElement;
                            string propertyName = m_Reader.LocalName;
                            bool   isNull;
                            string edmType;

                            if (m_Reader.MoveToAttribute("null", TableStorageConstants.Edm.NAMESPACE))
                            {
                                isNull = m_Reader.ReadContentAsBoolean();
                            }
                            else
                            {
                                isNull = false;
                            }

                            if (m_Reader.MoveToAttribute("type", TableStorageConstants.Edm.NAMESPACE))
                            {
                                edmType = m_Reader.ReadContentAsString();
                            }
                            else
                            {
                                edmType = TableStorageConstants.Edm.TYPE_STRING;
                            }

                            m_Reader.ReadStartElement(propertyName, TableStorageConstants.DataServices.NAMESPACE);

                            TableStorageField field = ToObject(m_Reader, edmType, isNull, propertyName);

                            m_Next.Add(field);

                            if (!isEmpty)
                            {
                                m_Reader.ReadEndElement();
                            }
                        }
                    }
                }
            }
        }
        public override int GetOrdinal(string name)
        {
            if ((m_Current != null) && m_Current.Contains(name))
            {
                TableStorageField field = m_Current[name];

                return(m_Current.IndexOf(field));
            }

            throw ThrowHelper.ThrowObjectNotFound(name, "name", "column with name");
        }
        private TableStorageFieldCollection ConvertParameters()
        {
            TableStorageFieldCollection parameters = new TableStorageFieldCollection();

            foreach (DbParameter parameter in m_Parameters)
            {
                if (parameter.Direction != ParameterDirection.Input)
                {
                    throw new TableStorageException(string.Format(Resources.ParamterDirectionNotSupported, ParameterDirection.Input));
                }

                TableStorageField field = ToField(parameter);

                parameters.Add(field);
            }

            return(parameters);
        }
Exemplo n.º 7
0
        public void WriteField(TableStorageField parameter)
        {
            m_Writer.WriteStartElement(parameter.Name, TableStorageConstants.DataServices.NAMESPACE);
            m_Writer.WriteAttributeString("type", TableStorageConstants.Edm.NAMESPACE, parameter.EdmType);

            object value = parameter.Value;

            if ((value == null) || DBNull.Value.Equals(value))
            {
                m_Writer.WriteAttributeString("null", TableStorageConstants.Edm.NAMESPACE, "true");
            }
            else if (typeof(Guid).Equals(parameter.DataType))
            {
                m_Writer.WriteString(value.ToString());
            }
            else
            {
                m_Writer.WriteValue(value);
            }

            m_Writer.WriteEndElement();
        }
        private HttpWebRequest GetRequest(TableStorageFieldCollection parameters, out string entryId)
        {
            if (m_Connection.State != ConnectionState.Open)
            {
                throw new TableStorageException(Resources.ConnectionNotOpen);
            }

            if (string.IsNullOrWhiteSpace(m_Connection.ConnectionString))
            {
                throw new InvalidOperationException("The ConnectionString property has not been initialized.");
            }

            Regex  queryExpression      = new Regex(@"^(?<verb>GET|POST|PUT|DELETE)\s*(?<path>/(?<tablename>[a-z][a-z0-9]{2,63}).*)$", RegexOptions.IgnoreCase);
            Match  queryMatch           = queryExpression.Match(CommandText);
            string verb                 = queryMatch.Groups["verb"].Value;
            string tableName            = queryMatch.Groups["tablename"].Value;
            string path                 = queryMatch.Groups["path"].Value;
            Regex  parametersExpression = new Regex(@"@(?<param>[\w]{1}[\w\d]*)", RegexOptions.IgnoreCase);

            MatchEvaluator evaluator = delegate(Match match)
            {
                string parameterName = match.Groups["param"].Value;

                if (parameters.Contains(parameterName))
                {
                    TableStorageField parameter = parameters[parameterName];
                    object            value     = parameter.Value;

                    if ((value == null) || DBNull.Value.Equals(value))
                    {
                        return(string.Empty);
                    }

                    return(string.Format(parameter.FormatString, parameter.Value));
                }

                throw new TableStorageException(string.Format(Resources.ParameterNotFound, parameterName));
            };

            path = parametersExpression.Replace(path, evaluator);

            CloudTableClient tableClient = m_Connection.StorageAccount.CreateCloudTableClient();

            tableClient.Timeout = TimeSpan.FromSeconds(CommandTimeout);
            tableClient.CreateTableIfNotExist(tableName);

            // TODO (Matt Magurany 8/14/2012): If a transaction exists, add to existing batch

            Uri url = new Uri(tableClient.BaseUri.AbsoluteUri.Trim('/') + path);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Accept = "application/atom+xml,application/xml";
            request.Headers["x-ms-version"]          = m_Connection.ServerVersion;
            request.Headers["Accept-Charset"]        = "UTF-8";
            request.Headers["DataServiceVersion"]    = "2.0;NetFx";
            request.Headers["MaxDataServiceVersion"] = "2.0;NetFx";
            request.Method  = verb;
            request.Timeout = CommandTimeout * 1000;

            if (StringComparer.OrdinalIgnoreCase.Equals("PUT", verb) || StringComparer.OrdinalIgnoreCase.Equals("DELETE", verb))
            {
                request.Headers["If-Match"] = "*";

                entryId = url.AbsoluteUri;
            }
            else
            {
                entryId = null;
            }

            m_Connection.StorageAccount.Credentials.SignRequestLite(request);

            return(request);
        }
        public override double GetDouble(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((double)field.Value);
        }
        public override object GetValue(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return(field.Value);
        }
        public override string GetString(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((string)field.Value);
        }
        public override DateTime GetDateTime(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((DateTime)field.Value);
        }
        public override long GetInt64(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((long)field.Value);
        }
        public override int GetInt32(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((int)field.Value);
        }
        public override Guid GetGuid(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((Guid)field.Value);
        }
        public override bool IsDBNull(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return(field.IsNull);
        }
        public override bool GetBoolean(int ordinal)
        {
            TableStorageField field = m_Current[ordinal];

            return((bool)field.Value);
        }