Een text bestand transporteren naar een access database via c# tooltje

Status
Niet open voor verdere reacties.

stevebravo

Gebruiker
Lid geworden
16 jan 2010
Berichten
156
Kan iemand mij een tip geven hoe ik dmv een tooltje, textbestanden kan overzetten in een access database?

als voorbeeld gebruik ik dit textbestandje:

persoon1.txt:

Naam: Jan Jansen
Adres: schoolstraat 1
Postcode: 1234AA
Stad: Amsterdam

Persoon2.txt:

Naam: Klaas Vaak
Adres: Spoorstraat 1
Postcode: 2345BB
Stad: Eindhoven


Nu moet de text achter Naam, adres, postcode en stad in een access tabel gezet worden in de rijen Naam, adres, postcode en stad dmv een c# tooltje

Hoe ga ik nu het beste te werk?

bedankt
 
Ik ga even wat proberen, ik rapporteer zo terug met het resultaat en eventuele bestanden.
Wel kan ik zeggen dat je er bijvoorbeeld OleDB voor kan gebruiken.

Update:
Hier de projectbestanden, volledig getest en werkend! Wel even het pad naar de database bewerken!
http://www.mijnbestand.nl/Bestand-6BTKAGMXUAXP.zip

Het wachtwoord: captainbri

Groeten Brian!
 
Laatst bewerkt:
Ik heb het iets weten te verbeteren, zie hieronder:

Database selecteren;
x3651k.png


1zr2yqo.png


Selecteer de map met de txt bestanden:
5e9276.png


11jokdc.png


In die map zitten de volgende bestanden:
2l8heu1.png


Hij gaat nu de bestanden verwerken, en hij heeft een fout bestand gevonden (voorbeeld-bestand):
95wg3a.png


En erna een verslagje van hoeveel geslaagd en gefaald:
nf4p3l.png


Het resultaat in de database:
zkmkpf.png


Het project-je kan je hier downloaden inclusief alle bestanden & de database: Klik!

Ik hoor graag wat je ervan hebt kunnen maken! :D:thumb:
 
Onwijs top.. maar het erge is nu dat ik het niet zelf leer..

ik zie dit als laatste strohalm.. iig ERG BEDANKT!
 
Ik heb het zo duidelijk als ik kon proberen uit te leggen, zie hieronder!


Op de form load moeten wat dingentjes gebeuren, eigenlijk de hele operatie.
private void Form1_Load(object sender, EventArgs e)
{
We laten een messagebox zien zodat ze gebruiker weet wat te doen.
MessageBox.Show("Selecteer de access database waarin u de gebruikers wilt importeren.",
"Selecteer Database", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
We maken een openfiledialog aan die de gebruiker vraagt om het database bestand.
OpenFileDialog dialog = new OpenFileDialog();
Als de gebruiker op ''OK'' heeft gedrukt,
if (dialog.ShowDialog() == DialogResult.OK)
{
Gaat hij kijken of de bestandsnaam eindigd met de database-extentie van access.
if (!dialog.FileName.EndsWith(".mdb"))
{
Als het niet het geval is laat hij een messagebox zien en sluit hij het programma.
MessageBox.Show("Dit bestand is geen geldig database bestand!");
Application.Exit();
}
Als het bestand wél met .mdb eindigd,
Moet hij de connectie pointen naar de databse, de de connectie openen.
Connection = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" + dialog.FileName);
Connection.Open();
}
}
Vragen waar de map is waarin de bestanden met personen in staan.
MessageBox.Show("Selecteer de map waaruit u de gebruikers wilt importeren.",
"Selecteer Map", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
Dat doen we met een folder-browser-dialog, zie hieronder.
FolderBrowserDialog folderbrowser = new FolderBrowserDialog();
Als er op ''OK'' is gedrukt (dat er een bestand is gekozen),
if (folderbrowser.ShowDialog() == DialogResult.OK)
{
Het geselecteerde pad in een string stoppen.
string path = folderbrowser.SelectedPath;
Een array van strings aanmaken waarin elk bestands-pad zit dat eindigt met een ''.txt'' extentie.
string[] paths = Directory.GetFiles(path, "*.txt");
Een for-loop starten, die begint bij 0 en doorgaat tot hij alle bestanden heeft gehad. Hij geeft hier een string mee met het pad van het bestand.
for (int i = 0; i < paths.Length; i++)
{
AddToDataBase(paths);
}

Als hij klaar is met het loopen, de connectie sluiten en weggooien.
Connection.Close();
Connection.Dispose();
Een messagebox laten zien met het resultaat, en de applicatie sluiten.
MessageBox.Show("De operatie is geslaagd, hieronder de resultaten:\r\n\r\n" +
"Geslaagd: " + Convert.ToString(succesvol) + "\r\nGefaald: " + Convert.ToString(gefaald));
Application.Exit();
}
}

De functie om het bestandje naar de database te zetten.
private void AddToDataBase(string path)
{
Een lezer aanmaken die het bestand leest die is meegegeven in de for-loop (zie de form_load)
StreamReader lezer = new StreamReader(path);
Alles dat in het bestandje staat in een string proppen.
string alles = lezer.ReadToEnd();
De naam, adres, postcode en stad-tekst wegwerken uit het bestandje door het te vervangen met niks.
alles = alles.Replace("Naam: ", "");
alles = alles.Replace("Adres: ", "");
alles = alles.Replace("Postcode: ", "");
alles = alles.Replace("Stad: ", "");
De tekst die in 'alles' staat splitten met elke enter, en dan in een array van strings zetten.
Een 'Environment.NewLine' staat gelijk aan de string ''\r\n'', dit betekent hetzelfde.
string[] test = System.Text.RegularExpressions.Regex.Split(alles, Environment.NewLine);
Kijken of het bestandje meer of minder regels bevat dat toegestaan is, zo ja, dan is het een fout bestand.
if (test.Length > 4 || test.Length < 4)
{
Laten zien welk bestand het foute bestand is, zodat dat bestand handmatig door de gebruiker ge-fixed kan worden.
MessageBox.Show("Dit bestand is geweigerd wegens incorrecte gegevens:\r\n" + path);
De integer variabele die bijhoud hoeveel er gefaald hebben ophogen met 1, en uit de functie springen zodat er geen foute data word toegevoegd.
gefaald++;
return;
}
Een nieuw commando aanmaken voor de database, die data invoegt ('Insert') in ('Into') de tabel ('Personen').
De kolom-namen móet je definiëren, anders kan het programma de kolommen niet vinden.
Daarna moeten er parameters aangemaakt worden, die je een 'Value' meegeeft.
Ik begin ze met een apenstaart en daarna een kleine 'c', de kleine 'c' is opzich niet nodig, over de apenstaart weet ik het niet zeker.
Zorg er wel voor dat de values een andere naam hebben dan je kolom-namen, voor de zekerheid.
OleDbCommand Command = new OleDbCommand("INSERT INTO Personen ([Naam], [Adres], "
+ "[Postcode], [Stad]) VALUES (@cNaam, @cAdres, @cPostcode, @cStad)", Connection);
Nu voeg je de data uit de array toe aan de parameters. test[0] is bijvoorbeeld de naam, deze geef je aan de parameter ''@cNaam'', welke een string is (character array).
Command.Parameters.Add("@cNaam", OleDbType.Char).Value = test[0];
Command.Parameters.Add("@cAdres", OleDbType.Char).Value = test[1];
Command.Parameters.Add("@cPostcode", OleDbType.Char).Value = test[2];
Command.Parameters.Add("@cStad", OleDbType.Char).Value = test[3];
Nu probeer je het commando uit te voeren. Gaat er iets mis dan vang je dat bij de ''catch'' op.
try
{
Command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Het commando weer weggooien.
Command.Dispose();
Aantal succesvolle items in de database gezet ophogen met 1.
succesvol++;
}
 
hallo jongens,
ik zoek zo'n zelfde type input om uitgelezen bios bestanden in txt formaat uit te lezen in een access bestand, zodat ik hiermee de informatie in een servicedesk kan updaten dagelijks.

Wat ik hierbij zie staan, is volgens mij grotendeels wat ik ook zoek, uiteraard moet ik een en ander aanpassen, maar dat is niet zo'n probleem.
waar kan ik dit hulptooltje downloaden.
 
CaptainBri, zou je het nog eens kunnen uploaden.
Ik ben namelijk naar ongeveer hetzelfde op zoek!

Alvast hard bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan