Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > из Excel в Access на C#


Автор: tatbesidovska 19.11.2010, 10:06
Подскажите, пожалуйста! Как можно на C# реализовать такой пример

Пример:

есть текстовый файл  txt с данными, который надо перенести в базу данных:

1203 Иванов 12000
1402 сидоров 5000

в результате экспорта этих данных должна получится база с полями:


ТБН     ФИО         Сумма

1203   Иванов     12000
1402   сидоров    5000

Заранее спасибо!


Автор: MasterOfCode 19.11.2010, 10:11
Цитата(tatbesidovska @  19.11.2010,  12:06 Найти цитируемый пост)
есть текстовый файл  txt с данными, который надо перенести в базу данных:

1203 Иванов 12000
1402 сидоров 5000

в результате экспорта этих данных должна получится база с полями:


ТБН     ФИО         Сумма

1203   Иванов     12000
1402   сидоров    5000

Заранее спасибо!


Пишешь Парсер текстового файла.
Считываешь его в своей программе.
Подключаешься к БД Access
Вставляешь значения в БД.

Автор: Экскалупатор 19.11.2010, 12:40
а к чему ексель в названии указан?

Автор: tatbesidovska 19.11.2010, 13:24
ой, извиняюсь, я перепутала, файл не текстовый, а xls

Автор: mrbrooks 19.11.2010, 13:48
Цитата(MasterOfCode @  19.11.2010,  10:11 Найти цитируемый пост)
Пишешь Парсер текстового файла.
Считываешь его в своей программе.
Подключаешься к БД Access
Вставляешь значения в БД. 

самый не продуктивный подход. в windows полным полно драйверов с помощью которых можно работать с любым удобоваримым файлом как с БД. А уж работа с  txt, xls, csv - это нынче не должно быть проблемой.  

Цитата(tatbesidovska @  19.11.2010,  13:24 Найти цитируемый пост)
ой, извиняюсь, я перепутала, файл не текстовый, а xls 

проще простого.
http://connectionstrings.com/excel

Автор: MasterOfCode 23.11.2010, 13:06
Цитата(mrbrooks @  19.11.2010,  15:48 Найти цитируемый пост)
самый не продуктивный подход. в windows полным полно драйверов с помощью которых можно работать с любым удобоваримым файлом как с БД.

Есть стандартное решение работы с файлом такого вида:

Код

~Version
VERS.                  2.0:Version
WRAP:                   NO:wrap
~Well
well.                 1234:well number
uwi.               3211234:id
CTRY.                   01:Country
~Curve
DEPT.                     :
PS.                       :001101
IK.                       :002100
~ASCII
100.00    0.25    1.22
100.20    0.26    1.22
100.40    0.22    1.21
100.80    0.28    1.20
100.80    0.25    1.20
101.00    0.27    1.18

Автор: mrbrooks 23.11.2010, 13:11
Цитата(MasterOfCode @  23.11.2010,  13:06 Найти цитируемый пост)
Есть стандартное решение работы с файлом такого вида:

это смотря что надо делать с блоком:
Цитата

~Version
VERS.                  2.0:Version
WRAP:                   NO:wrap
~Well
well.                 1234:well number
uwi.               3211234:id
CTRY.                   01:Country
~Curve
DEPT.                     :
PS.                       :001101
IK.                       :002100
~ASCII

Автор: MasterOfCode 23.11.2010, 13:37
Цитата(mrbrooks @  23.11.2010,  15:11 Найти цитируемый пост)
это смотря что надо делать с блоком:

Этот блок, как набор параметров описания исследования. Его нужно распарсить и хранить значения, в зависимости от задач загрузить в БД или сохранить в файл. Таблица ~ASCII как значения параметров исследования приборами.

Автор: mrbrooks 23.11.2010, 15:01
ок. в данном случае, как я понимаю, заголовок является управляющей логикой. его же ты в БД или иное хранилище не помещаешь.
а вот то что идет ниже вполне структурированные данные которые отлично импортируются через имеющиеся дрова. все эти вещи хорошо настраиваются.

пойми - я же тебя не в чем не убеждаю и не упрекаю - хочешь писать парсеры - да ради Бога  smile 
просто я на этом деле собаку съел. был случай когда мне в БД приходилось раз в три минуты вставлять данные из шести метрового текстового файла, кстати очень схожей конструкции. в данном случае пока бы я его парсил очень могла бы возникнуть очередь. 

Автор: MasterOfCode 24.11.2010, 08:00
Цитата(mrbrooks @  23.11.2010,  17:01 Найти цитируемый пост)
в данном случае, как я понимаю, заголовок является управляющей логикой. его же ты в БД или иное хранилище не помещаешь.

Как раз помещаю. 
Я писал парсер который за доли секунд этот файл считывает. Файлы там в среднем по 2,5-3 Мб. Бывают и по 20.

Автор: mrbrooks 24.11.2010, 08:59
Цитата(MasterOfCode @  24.11.2010,  08:00 Найти цитируемый пост)
Я писал парсер который за доли секунд этот файл считывает. 

ок. в твоем случае конечно нужно не стандартное решение. но для TC вполне достаточно и стандартного. а 20 Mb текстовые файлы - это очень круто.

Автор: MasterOfCode 24.11.2010, 09:06
Цитата(mrbrooks @  24.11.2010,  10:59 Найти цитируемый пост)
а 20 Mb текстовые файлы - это очень круто. 

Такова специфика. В нефтяную скважину опускают прибор, и он снимает показания каждые 10 см. И так на протяжении 3-3,5 км. При одном исследовании могут проводить 20-25 спуск-подъемов разных приборов. И все это пишут в один файл. Вот так.
А мы потом их считывай и в БД загружай. В среднем конечно они не такие огромные, но встречаются и такие, не редко.

Автор: mrbrooks 24.11.2010, 09:15
Цитата(MasterOfCode @  24.11.2010,  09:06 Найти цитируемый пост)
А мы потом их считывай и в БД загружай. В среднем конечно они не такие огромные, но встречаются и такие, не редко. 

кстати - это стандартный костыль - для связи промышленных устройств с хранилищами данных.  smile 
хотя встречал уже девайсы которые сами могут писать в субд( либо по Ethernet, либо по Wi-Fi). хотя конечно это помогает не всегда. думаю нефтяная скважина из этой оперы.

Автор: tatbesidovska 24.11.2010, 15:19
Реализовала так:

Строка подключения:
string _conn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Da​ta Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", _filename);

Запрос:
_command.CommandText = @"SELECT * INTO [MS Access;Database=C:\Avans\Tabel.mdb].[Tabel] FROM [Лист1$]";

Проблемка такая: Если на листе Excel были сделаны какие-то изменения, в том числе добавлялись записи, а затем эти записи очищались, а не удалялись, то при переносе в базу данных строки с очищенными данными попадают в базу со значением в поле «0», либо в базу добавляются просто пустые строчки. Как можно прописать в запросе, чтобы выборка данных из листа Excel была по диапазону, ограниченному пустыми строками и столбцами. Можно конечно сделать по определенному диапазону, например написав так:....FROM [Лист1$A1:E35], но к сожалению диапазон может каждый раз меняться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)