На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > Последовательно выводить строку за строкой из определенной таблицы
      Друзья, здравствуйте!

      Пишу программу на C#. Задача заключается в том, чтобы из access таблицы последовательно выводить строку за строкой из определенной таблицы.

      n1
      n2
      n3
      ...

      и т.д.

      большим специалистом не являюсь. нашел код и адаптировал под свои цели. проблема заключается в том, что применяемый алгоритм, в каждом цикле ищет строку по ID методом сравнения от начала таблицы.

      все бы хорошо, да в базе данных порядка 100 000 строк и на считывание их таким алгоритмом уходит более 12 часов.

      я бы хотел чтобы алгоритм запоминал местоположение последнесчитываемой строки и начинал чтение в новом цикле с последнего места, а не искал все заново.

      короче говоря, хочу понять как обратиться в таблице и считать конкрутную строку и столбец. скажем 3 строку и 4 столбец.

      вот код который у меня реализован сейчас:

      [CSHARP]using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Data.OleDb;

      namespace ODBC
      {
      class Program
      {
      static void Main(string[] args)
      {

      TimeSpan Point1, Point2, Point3, Point4, Point5; // объявляем переменные для хранения времени, это точки измерения скорости обработки данных нашим ботом
      Point1 = DateTime.Now.TimeOfDay; // засикаем время начала работы робота

      string x = "WHERE Index = "; // данная переменная хранит част SQL запроса в базу Access
      int nomer_sdelki = 1024111; // вводим начальное значение индексатора в таблце (точка отправки вывода)
      string filter; // переменная хранит объединенную часть команды из x и nomer_sdelki
      string a, b, c; // переменные для хранения считываемых данных

      OleDbDataReader myOleDbDataReader; // создаем объект OleDbDataReader


      // Формируем строку с параметрами подключения к файлу базы данных

      string connectionString =
      "provider=Microsoft.Jet.OLEDB.4.0;" +
      "data source=E:\\VisualStudio8.0\\ODBC\\QUOTE.mdb";

      // создаем объект OleDbConnection для соединения с Бд и передаем его конструктору строку с параметрами подключения
      OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);

      // создаем объект OleDbCommand
      OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();


      // открываем соединение с БД с помощью метода Open() объекта OleDbConnection
      myOleDbConnection.Open();


      // организуем цикл считывания данных из базы access
      while (nomer_sdelki != 0)
      {

      Point4 = DateTime.Now.TimeOfDay; // засекаем время на считывание одной строки

      filter = x + nomer_sdelki.ToString(); // создаем часть запроса на поиск индексируемой строки

      // задаем SQL-запрос к базе данных в свойстве CommandText объекта OleDbCommand
      // Результатом запроса должны быть данные клинета с именем Кто-то

      myOleDbCommand.CommandText =
      "SELECT Nomer, Vrema, Cena " + // сюда прописываем название столбцов в таблице базы данных(обращаем внимание на пробелы)
      "FROM RIU2 " + // сюда прописываем название таблицы в базе данных
      filter; // сюда прописывается сортируемое слово


      // присваиваем объекту OleDbDataReader и вызываем метод ExecuteReader() для выполнения введенного SQL-запроса

      myOleDbDataReader = myOleDbCommand.ExecuteReader();

      // Читаем строку ответа базы данных с помощью метода Read() объекта OleDbDataReader
      myOleDbDataReader.Read();


      // отображаем результат запроса
      // с проверкой на наличие в таблице данных по номеру индекса

      if (myOleDbDataReader.HasRows != false)
      {

      Point2 = DateTime.Now.TimeOfDay; // фиксируем время прохождения
      Point3 = Point2 - Point1; // рассчитываем общее время работы робота
      Point5 = Point2 - Point4; // рассчитываем время на чтение одной строки

      Console.WriteLine(myOleDbDataReader["Nomer"] // воводим данные из ячейки в столбце ...
      + " " + myOleDbDataReader["Vrema"] // воводим данные из ячейки в столбце ...
      + " " + myOleDbDataReader["Cena"] // воводим данные из ячейки в столбце ...
      + " " + Point3 + " " + Point5); // воводим время

      // записываем результаты в переменные.
      // эти данные служат для вывода в бот.
      // точка подключения торгового ядра

      a = myOleDbDataReader["Nomer"].ToString();
      b = myOleDbDataReader["Vrema"].ToString();
      c = myOleDbDataReader["Cena"].ToString();

      }

      nomer_sdelki++; // увеличиваем значение индексируемого столбца на +1


      // закрываем OleDbDataReader методом Close()
      myOleDbDataReader.Close();

      }



      // работа по чтению данных закончена, закрываем соединение с БД
      myOleDbConnection.Close();

      }
      }
      }[/CSHARP][/QUOTE]
        Как же вас занесло в раздел про C++? Для .Net есть отдельная ветка.
        Кстати почитайте про Linq.
        И поправьте разметку сообщения.
        И цикл у вас бесконечный, упадёт на переполнении nomer_sdelki.
        И мне кажется куда логичней сделать 1 запрос к БД со всеми интересующими номерами (BETWEEN).
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0183 ]   [ 17 queries used ]   [ Generated: 26.04.24, 07:16 GMT ]