konto usunięte

Temat: import CSV do bazy SQL

Witam,
Napisze dokładnie co potrzebuje zrobić:
Potrzebuje kontrolkę ASCX, ktora bedzie importowala plik CSV bezpośrednio do istniejacej tabeli w bazie MS SQL.

Prościej mówiąc: klikam sobie w FileUpload; plik wczytuje sie do tabeli pracowników w bazie (nigdzie nie zapisuje) i tyle.

Problem mam z "parsowaniem" i zapisywaniem danych w odpowiednie kolumny. Podkreślam, że w pliku CVS może być wiele wierszy. Musze określić, że ten fragment to kolumna imie, kolejny to nazwisko w tabeli itd.
W internecie jest kilka rozwiazań jednak wiekszość ma jakieś braki. Byłbym zobowiazany za łopatologiczne wskazówki.Marcin Gregier edytował(a) ten post dnia 14.04.09 o godzinie 17:21
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: import CSV do bazy SQL

A nie możesz się wpiąć w csv używając ado? wtedy nie bawiłbyś się specjalnie w parsowanie.
Tomasz Filipkowski

Tomasz Filipkowski Senior Analyst /
Programist

Temat: import CSV do bazy SQL

plik CVS ma pewną strukturę - najczęściej poszczególne kolumny są rozdzielane znakiem średnika (;) - zatem aby rekordy "rozłożyć" powinieneś użyć Splita:



using System.IO;

private void funckja()
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
// wczytujemy cały plik z treścią
TextReader tr = new StreamReader(openFileDialog1.FileName);

// pobieramy każdą linię po kolei
string liniaTekstu = tr.ReadLine();

// sprawdzam czy to już aby nie jest koniec pliku
while (liniaTekstu != null)
{
// dzielimy tekst na dane tablicowe
string[] dane = liniaTekstu.Split(';');

//TU POWINIEN NASTĄPIĆ INSERT DO BAZY DANYCH
//"INSERT INTO TABLELKA(KOLUMNA_1, KOLUMNA_2, KOLUMNA_3)
//VALUES (dane[0], dane[1], dane[2])"

//MOŻEMY TAKŻE WYCIĄGNĄC TE DANE FOREACH'EM
//foreach (string kolumna in dane)
//{
// MessageBox.Show(kolumna);
//}

// wczytujemy kolejną linię danych z pliku
liniaTekstu = tr.ReadLine();
}
}


oczywiście zamiast fileopendialog używasz fileupload - kwestia znalezienia pliku nie powinna stanowić problemu.
Struktura pliku (tzn. ilość kolumn po zmianie będzie wymagała poprawienia kodu) - natomiast ilość wierszy nie ma tu znaczenia, no chyba, że weźmiemy plik z milionami rekordów to się komp może
nieco zamulić ;)Tomasz Filipkowski edytował(a) ten post dnia 15.04.09 o godzinie 17:44
Jakub Korupczyński

Jakub Korupczyński Software Developer

Temat: import CSV do bazy SQL

A jak treść danego rekordu jest kilkulinijkowa ?:)Jakub Korupczyński edytował(a) ten post dnia 16.04.09 o godzinie 08:10
Tomasz Filipkowski

Tomasz Filipkowski Senior Analyst /
Programist

Temat: import CSV do bazy SQL

to oznacza błąd danych pliku CVS :P bowiem poszczególne kolumny sa rozgraniczane znakiem specjalnym (w tym przypadku ';') a nowa linia '\n' jest dla takiego "parsera" wyznacznikiem kolejnego rekordu.
Jakub Korupczyński

Jakub Korupczyński Software Developer

Temat: import CSV do bazy SQL

I tu się mylisz :) \n jest możliwe tyle, że taki tekst musi być w cudzysłowach. Tak czy inaczej trzeba pisać parsowanie normalne zazwyczaj do cvs'ów. Też już się na tym przejechałem, jak mi ostatnio jakiś wykaz dali, który miałem przenieść z excela do bazy i się okazało, że są wpisy kilkulinijkowe :)
Tomasz Filipkowski

Tomasz Filipkowski Senior Analyst /
Programist

Temat: import CSV do bazy SQL

no fakt - ale jak sam zauwazyłeś nie bezwarunkowo - poza tym chyba trzeba sie mocno starać aby coś takiego wyprodukować ;)
A jesli chodzi o dziwne przypadki - jeszcze jak siedziałem w backoffice Contact Center to przy okazji współpracy z zewnętzrnymi Call Center dużo się naoglądałem - ludzi to mają fantazję ale jesli to ty płącisz to masz prawo wymagać i właśnie tak to potraktowałem - duża awantura a później tylko mniejsze zjeb.. jak coś nie pasowało do szablonu ;)
Piotr Owsiak

Piotr Owsiak
projektant/programis
ta .NET
(freelance/contrator
), pragma...

Temat: import CSV do bazy SQL

Panowie,
po pierwsze CSV a nie CVS ;-P
po drugie comma to jest przecinek, a nie średnik ;-P

Polecam http://tools.ietf.org/html/rfc4180

@Marcin:
Jeśli chcesz to mogę Ci coś takiego skrobnąć. Kiedyś pisałem coś takiego, ale nie mogę Ci tego kodu niestety dać. Mógłbym za to napisać od zera (zgodnie z opisem w RFC), bo lubię takie taski :)

Następna dyskusja:

Raportowanie bez servera SQL




Wyślij zaproszenie do