Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.169.94] |
|
Сообщ.
#1
,
|
|
|
Друзья, здравствуйте!
Пишу программу на 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] |
Сообщ.
#2
,
|
|
|
Как же вас занесло в раздел про C++? Для .Net есть отдельная ветка.
Кстати почитайте про Linq. И поправьте разметку сообщения. И цикл у вас бесконечный, упадёт на переполнении nomer_sdelki. И мне кажется куда логичней сделать 1 запрос к БД со всеми интересующими номерами (BETWEEN). |