Пример #1
0
        /// <summary>
        /// загрузить котировки из файла и сохранить их в БД, пачками
        /// </summary>
        private void BtnSaveInDbClick(object sender, EventArgs e)
        {
            var           commandsBlock      = new List <string>();
            const int     maxCommandsInBlock = 50;
            var           ticker             = tbTickerId.Text.ToInt();
            SqlConnection connection         = null;
            var           connectionString   = ConfigurationManager.ConnectionStrings["QuoteBase"].ConnectionString;
            var           startTime          = dpStart.Value;
            var           endTime            = dpEnd.Value;

            if (openFileDialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            try
            {
                var newFormat = false;
                connection = new SqlConnection(connectionString);
                connection.Open();
                using (var sr = new StreamReader(openFileDialog.FileName))
                {
                    DateTime?date = null;
                    while (!sr.EndOfStream)
                    {
                        var line = sr.ReadLine();
                        if (string.IsNullOrEmpty(line))
                        {
                            continue;
                        }

                        DateTime?fileDate;
                        var      isNew = QuoteData.IsNewFormatDateRecord(line, out fileDate);
                        if (fileDate.HasValue)
                        {
                            date = fileDate;
                        }
                        if (isNew)
                        {
                            newFormat = true;
                            continue;
                        }
                        var quote = newFormat ? QuoteData.ParseQuoteStringNewFormat(line, date.Value) :
                                    QuoteData.ParseQuoteStringOldFormat(line);
                        if (quote == null)
                        {
                            continue;
                        }
                        if (quote.time < startTime)
                        {
                            continue;
                        }
                        if (quote.time > endTime)
                        {
                            break;
                        }

                        var cmd = MakeInsertQuoteCmd(ticker, quote);
                        commandsBlock.Add(cmd);
                        if (commandsBlock.Count > maxCommandsInBlock)
                        {
                            ExecuteSaveCommands(commandsBlock, connection);
                            commandsBlock.Clear();
                        }
                    }
                }
                if (commandsBlock.Count > 0)
                {
                    ExecuteSaveCommands(commandsBlock, connection);
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка сохранения в БД", ex);
                MessageBox.Show(string.Format("Ошибка сохранения в БД: {0}", ex.Message));
                return;
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
            }
            MessageBox.Show("Котировки сохранены в БД");
        }
Пример #2
0
        private void ProcessFile(string path, string ticker)
        {
            var dateStart    = dpStart.Value;
            var dateEnd      = dpEnd.Value;
            var destFileName = tbDestFolder.Text.TrimEnd('\\') + "\\" + ticker + ".quote";

            using (var sr = new StreamReader(path))
                using (var sw = new StreamWriter(destFileName))
                {
                    DateTime?curTime   = null;
                    DateTime?storeDate = null;
                    while (!sr.EndOfStream)
                    {
                        var      line = sr.ReadLine();
                        DateTime?quoteDate;
                        QuoteData.IsNewFormatDateRecord(line, out quoteDate);
                        if (quoteDate.HasValue)
                        {
                            curTime = quoteDate;
                        }
                        if (!curTime.HasValue)
                        {
                            continue;
                        }
                        var quote = QuoteData.ParseQuoteStringNewFormat(line, curTime.Value);
                        if (quote == null)
                        {
                            continue;
                        }

                        if (quote.time < dateStart)
                        {
                            continue;
                        }
                        if (quote.time > dateEnd)
                        {
                            break;
                        }

                        // записать котировку
                        var writeDate = false;
                        if (!storeDate.HasValue)
                        {
                            writeDate = true;
                        }
                        else
                        {
                            if (storeDate.Value != quote.time.Date)
                            {
                                writeDate = true;
                            }
                        }
                        storeDate = quote.time.Date;
                        if (writeDate)
                        {
                            sw.WriteLine(string.Format("{0:ddMMyyyy}", quote.time));
                        }
                        sw.WriteLine(
                            string.Format(CultureInfo.InvariantCulture, "{0:HHmm} {1} {2}",
                                          quote.time, quote.bid, quote.ask));
                    }
                }
        }