Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для Killian
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53

Запись из файла в Базу данных (как организовать структура кода)

18.09.2012, 17:15. Показов 4335. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из файла построчно считывается текст. Далее текст разбивается на отдельные значения и заносится в базу данных.
Собственно саму проблему решить не трудно.
Но вот хотелось бы узнать, как грамотно следует структурировать код?
Следует сделать отдельный класс для записи/чтения из БД
и отдельный класс для работы с файлами?
или все должно быть в одном классе?

нужно ли выделять отдельный класс на обработку текстового потока?

P.s. всегда хочется все поместить в один единственный класс Но знаю что это неправильный подход )

Подскажите пожалуйста! Спасибо!

Добавлено через 23 часа 16 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class ToDBClass : IToDB
    {
        DbLotteryDataSetTableAdapters.lotTableTableAdapter _lotAdap = new DbLotteryDataSetTableAdapters.lotTableTableAdapter();
        DbLotteryDataSet _dataset = new DbLotteryDataSet();
        public string ReadfromDB()
        {
            _lotAdap.Fill(_dataset.lotTable);
            StringBuilder builder = new StringBuilder();
            foreach (DbLotteryDataSet.lotTableRow row in _dataset.lotTable)
            {
                builder.Append(row.date_time.ToShortDateString() + " " + row.num_1 + " " + row.num_2 + " " + row.num_3 + " " + row.num_4 + " " + row.num_5
                        + " " + row.num_6 + " " + row.bonus_num + "\n");
            }
            return builder.ToString();
        }
 
        public void WritetoDB(TextReader reader)
        {
            int stroka = 0;
            _lotAdap.ClearBeforeFill = true;
            while (reader.Peek() != -1)
            {
                stroka++;
                string OneString = reader.ReadLine();
                string[] SplitString = OneString.Split(new char[] { ' ' });
                string[] SplitDate = SplitString[0].Split(new char[] { '.' });
 
                try
                {
                    _lotAdap.Insert(new DateTime(int.Parse(SplitDate[0]), int.Parse(SplitDate[1]), int.Parse(SplitDate[2])),
                        int.Parse(SplitString[1]), int.Parse(SplitString[2]), int.Parse(SplitString[3]), int.Parse(SplitString[4]),
                        int.Parse(SplitString[5]), int.Parse(SplitString[6]), int.Parse(SplitString[7]));
                }
                catch (Exception)
                {
                    Console.WriteLine("Сбой чтения файла.\n\t Строка №" + stroka);
                }
                Console.WriteLine(OneString);
            }
        }
        public void WritetoDB(string datastring)
        {
            TextReader reader = new StringReader(datastring);
            WritetoDB(reader);
        }
 
        public void Writetoconsole()
        {
            Console.WriteLine(ReadfromDB());
        }
    }
Вот собственно класс работающий с БД.

Кстати, вопрос, в какой момент он реально в базу данных отправляет, а когда работает с отсоединенными данными в приведенном примере? когда он открывает/закрывает соединение с БД?
Занесение данных в БД происходит очень медленно, пока не разобрался почему
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2012, 17:15
Ответы с готовыми решениями:

Подскажите как организовать базу данных из файла в котором есть иерархия
Привет! Есть файл xml c древовидной структурой. <?xml version="1.0" encoding="UTF-8"?> <menu> <child text="Привод,...

Как организовать чтение и запись в базу файлов?
Всем всего! Я многое пропустил в этой жизни, а хотелось бы наверстать упущенное. Отсюда вопрос: Как все-таки организовать чтение и запись...

Запись данных в базу из файла
В курсаче есть задание, чтобы программа осуществляла ввод данных в базу данных из файла. Как это сделать не знаю. Подскажите пожалуйста как...

8
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
19.09.2012, 17:18
У вас непонятная структура проекта.
Так что можете делать так как вам удобно.
Потом сами увидите как лучше.
0
 Аватар для Killian
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
19.09.2012, 21:25  [ТС]
n1l, да, со структурой уже вопрос решен...
Создал два класса(контроллера). Создаются фабрикой. Пользователю доступны только интерфейсы "IToDB" и "IToFile", каждый работает со своими данными соответственно. Конечный пользователь(в методе main) перегоняет данные из одного контроллера в другой, при помощи свойств и методов .
Не жалею что разделил на 2 класса. Структура реально гибкая получается!
Хочу сделать еще 3-й контроллер(обработчик списка Linq).

Сейчас 2 основные проблемы:
1 -я. Как потоком передавать список?? Подскажите пожалуйста! (через StreamReader??)
и 2-ая. Проблема - очень долго пишет в БД(около секунды на строку). Может я чего не так написал?
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
19.09.2012, 23:59
у вас стиль процедурного программирования, вот что я имел ввиду. Объектного ничего нет.
0
 Аватар для Killian
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
20.09.2012, 12:12  [ТС]
n1l, это не ООП?
метод main
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Program
    {
        private static string fileadress = "lott.txt";
        static void Main(string[] args)
        {
            IFileList FileListController = Fabric.CreateFileList(fileadress);
            IToDB DBController = Fabric.CreateDBClass();
            List<Ticket> tics = FileListController.GetTList();
            tics = tics.Where((n) => n.TicketNum1 == 10).Select((n) => { n.TicketNum1 += n.TicketNum2; return n; }).Where((n) => n.TicketNum1 < 25).ToList();
            DBController.WritetoDB(((IToFile)FileListController).GetFileReader(fileadress));
            DBController.Writetoconsole();
            ((IToFile)FileListController).Writetofile(DBController.GetDBReader(), "newLott.txt");
            CopyFile("lott.txt", "OthetLott.txt");
        }
        static void CopyFile(string fr_adress, string to_adress)
        {
            IToFile FileController = Fabric.CreateFileClass(fileadress);
            FileController.Writetofile(FileController.GetFileReader(fr_adress), to_adress);
        }
    }
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
20.09.2012, 12:21
а вы как думаете, вы не работаете с объектами.
0
 Аватар для Killian
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
20.09.2012, 12:35  [ТС]
n1l, т.е. DBController и DBController - это не объекты, только потому что у них нет своих собственных данных? не согласен...
0
 Аватар для n1l
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
20.09.2012, 12:50
ваше право.
0
 Аватар для Killian
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
21.09.2012, 15:13  [ТС]
Нашел решение проблемы долгой записи в БД(работает почти с такой же скоростью, как и при стандартном SQL обращении при помощи параметров)
C#
1
2
3
4
5
6
foreach (Ticket tic in TList)
            {
                    _dataset.lotTable.Rows.Add(tic.TicketDate, tic.TicketNum1, tic.TicketNum2, tic.TicketNum3, tic.TicketNum4, tic.TicketNum5, tic.TicketNum6,
                      tic.TicketBonusNum);
            }
            _lotAdap.Update(_dataset.lotTable);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.09.2012, 15:13
Помогаю со студенческими работами здесь

Запись в базу данных из ASP файла
ПОМОГИТЕ КТО СМОЖЕТ - ЗАПИСЬ В БД !!!! У МЕНЯ ЕСТЬ БАЗА dbase/users.mdb - ДЛЯ РЕГИСТРАЦИИ ПОЛЬЗОВАТЕЛЕЙ В НЕЙ ТАБЛИЦЫ UserID,...

Как правильно организовать базу данных
Пишу сайт-портфолио. Помогите как правильно организовать базу данных. Хочу сделать примерно так: главная страница - обзор всех видов...

Как организовать базу данных словаря
Стоит задача посчитать количество уникальных слов, которые использовали русские писатели и разделить их по частям речи. В итоге должно...

Как можно организовать базу данных?
Здравствуйте, до меня все не доходит, как можно хранить вот такие данные Например: есть сотрудник и ему нужно давать задания, вот у него...

Как организовать побитовую запись двоичного кода (Хаффман) ?
Пытаюсь реализовать алгоритм Хаффмана, который будет сжимать текстовый файл. Уже построено дерево tree, у которого есть: tree-&gt;simvol...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru