public IEnumerable <KeyValuePair <long, Tick> > Read()
        {
            LinterDbCommand command = connection.CreateCommand();

            command.CommandText = String.Format(
                "SELECT * FROM {0} " +
                "ORDER BY ID", name);

            using (LinterDbDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    long key = reader.GetInt64(0);

                    Tick tick = new Tick();
                    tick.Symbol    = reader.GetString(1);
                    tick.Timestamp = reader.GetDateTime(2);
                    tick.Bid       = reader.GetDouble(3);
                    tick.Ask       = reader.GetDouble(4);
                    tick.BidSize   = reader.GetInt32(5);
                    tick.AskSize   = reader.GetInt32(6);
                    tick.Provider  = reader.GetString(7);

                    yield return(new KeyValuePair <long, Tick>(key, tick));
                }
            }
        }
        public Tick this[long key]
        {
            get
            {
                LinterDbCommand command = connection.CreateCommand();
                command.CommandText = String.Format(
                    "SELECT * FROM {0} " +
                    "WHERE ID = {1}", name, key);

                using (LinterDbDataReader reader = command.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        Tick tick = new Tick();
                        tick.Symbol    = reader.GetString(1);
                        tick.Timestamp = reader.GetDateTime(2);
                        tick.Bid       = reader.GetDouble(3);
                        tick.Ask       = reader.GetDouble(4);
                        tick.BidSize   = reader.GetInt32(5);
                        tick.AskSize   = reader.GetInt32(6);
                        tick.Provider  = reader.GetString(7);
                        return(tick);
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
            set
            {
                lock (SyncRoot)
                {
                    writeCommand.Parameters[0].Value = key;
                    writeCommand.Parameters[1].Value = value.Symbol;
                    writeCommand.Parameters[2].Value = value.Timestamp;
                    writeCommand.Parameters[3].Value = value.Bid;
                    writeCommand.Parameters[4].Value = value.Ask;
                    writeCommand.Parameters[5].Value = value.BidSize;
                    writeCommand.Parameters[6].Value = value.AskSize;
                    writeCommand.Parameters[7].Value = value.Provider;

                    writeCommand.ExecuteNonQuery();
                }
            }
        }