Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
1

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

18.09.2012, 17:15. Показов 2892. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2012, 17:15
Ответы с готовыми решениями:

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

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

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

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

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

Сейчас 2 основные проблемы:
1 -я. Как потоком передавать список?? Подскажите пожалуйста! (через StreamReader??)
и 2-ая. Проблема - очень долго пишет в БД(около секунды на строку). Может я чего не так написал?
0
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
19.09.2012, 23:59 4
у вас стиль процедурного программирования, вот что я имел ввиду. Объектного ничего нет.
0
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
20.09.2012, 12:12  [ТС] 5
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
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
20.09.2012, 12:21 6
а вы как думаете, вы не работаете с объектами.
0
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
20.09.2012, 12:35  [ТС] 7
n1l, т.е. DBController и DBController - это не объекты, только потому что у них нет своих собственных данных? не согласен...
0
136 / 138 / 18
Регистрация: 26.07.2010
Сообщений: 911
20.09.2012, 12:50 8
ваше право.
0
6 / 8 / 0
Регистрация: 21.06.2012
Сообщений: 53
21.09.2012, 15:13  [ТС] 9
Нашел решение проблемы долгой записи в БД(работает почти с такой же скоростью, как и при стандартном 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2012, 15:13

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

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

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

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

запись из txt файла в базу данных Access
Здравствуйте, я не очень хорошо пока пишу на ASP, но мне на данный момент нужно решить такую...

Подскажите как правильно организовать базу данных
Есть таблица с информацией о работнике (id_работника и т.д.). Есть расписание, в котором я хочу...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.