Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Import von CSV zu MySQL mit VB.NET

Frage Entwicklung Visual Studio

Mitglied: ForgottenRealm

ForgottenRealm (Level 1) - Jetzt verbinden

12.08.2013, aktualisiert 13.08.2013, 2839 Aufrufe, 10 Kommentare, 1 Danke

Guten Tag!


Ich versuche für ein kleines Projekt, eine CSV Datei mit VB.net in eine MySQL Datenbank einzubinden.

Mein Programmcode sieht bisher so aus ..

01.
Dim TV_Tabelle As String 
02.
TV_Tabelle = "C:\Tabelle.csv" 
03.
 
04.
Dim con As New MySqlConnection 
05.
Dim cmd As New MySqlCommand 
06.
 
07.
con.ConnectionString = "server=" & Public_DBServerAdresse & ";uid=" & Public_DBServerClient & ";pwd=" & Public_DBServerPasswort & ";database=" & Public_DBServerDatenbank & ";port=" & Public_DBServerPort 
08.
 
09.
cmd.Connection = con 
10.
 
11.
 
12.
cmd.CommandText = "LOAD DATA LOCAL INFILE '" & TV_Tabelle & "' INTO TABLE " & GetFileName(TV_Tabelle) & " FIELDS TERMINATED BY ';'" 
13.
 
14.
'cmd.CommandText = "CREATE TABLE" & MySpace & GetFileName(TV_Tabelle) & MySpace & "(Client VARCHAR(50))" 
15.
 
16.
Try 
17.
 
18.
	con.Open() 
19.
 
20.
	cmd.ExecuteNonQuery() 
21.
 
22.
	con.Close() 
23.
 
24.
Catch ex As Exception 
25.
 
26.
 
27.
 
28.
	MsgBox(ex.Message) 
29.
 
30.
End Try
Die Tabelle wird einmal durch den auskommentierten CommandText erstellt, aber beim Aufruf mit der LOAD DATA ... Zeile läuft das Programm einige Zeit und bricht dann mit dem Fehler "Fatal error encountered attempting to read the resultset." ab. Damit kann ich leider gar nichts anfangen und ich steh, was die Fehlersuche angeht, absolut auf dem Schlauch.

Auch wenn ich versuche, die CSV Datei in eine Tabelle zu importieren, in der ich diese zuvor von Hand über phpmyadmin eingebunden habe, kommt diese Fehlermeldung.

Liegt der Fehler am CommandText oder wo?

Freundliche Grüße
Mitglied: colinardo
12.08.2013, aktualisiert um 12:01 Uhr
Hallo ForgottenRealm,
probiers mal mit
01.
cmd.CommandText = "LOAD DATA LOCAL INFILE '" & TV_Tabelle.Replace("\","/") & "' INTO TABLE " & GetFileName(TV_Tabelle) & " FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'" 
kann auch sein das du LINES TERMINATED BY '\n' noch in LINES TERMINATED BY '\r\n' ändern musst.

eventuell musst die LOAD DATA LOCAL Funktion in der MySQL-Konfiguration erst noch freischalten:
http://stackoverflow.com/questions/10762239/enable-load-data-local-infi ...

Grüße Uwe
Bitte warten ..
Mitglied: ForgottenRealm
12.08.2013 um 12:43 Uhr
Hallo colinardo,

vielen Dank für die schnelle Antwort!

Mit dem CommandText ging es direkt, ich denke mal der Fehler war das "\" statt "/" Zeichen

Der Import funktioniert klasse, allerdings habe ich jetzt noch das Problem, das beim Import die Feldnamen nicht mit übernommen werden.

Die Tabelle wurde von mir einmal erstellt, mit dem Feld "Clients", weitere Felder habe ich allerdings so nicht angelegt.

Gibt es eine einfache Möglichkeit, im CommandText anzugeben, dass nicht vorhandene Felder erstellt werden?

Ich muss leider gestehen, dass ich mich mit den SQL Commands nur sehr wenig auskenne

Alternativ kann ich mir auch eine Funktion erstellen, mit der ich die Feldnamen aus meiner CSV Tabelle auslese und die Tabelle auf dem MySQL Server vor dem Import mit allen benötigten Feldern erstelle.

Grüße
Bitte warten ..
Mitglied: colinardo
12.08.2013 um 13:14 Uhr
Bin jetzt auch nicht so im Thema drin, aber die Überschriftenzeile kannst mit IGNORE 1 LINES zusätzlich im Command überspringen, um nur die Daten zu importieren.
Schau dir mal folgendes PDF zu dem Thema an.
Grüße Uwe
Bitte warten ..
Mitglied: ForgottenRealm
12.08.2013 um 15:38 Uhr
Ich schau mir das mal an, vielen Dank !
Bitte warten ..
Mitglied: ForgottenRealm
13.08.2013 um 15:11 Uhr
Moin

wie es scheint gibt es doch noch ein Problem ...

In einem Feld importiere ich einen Windows Dateipfad, aus diesem entfernt der Import allerdings sämtliche \ Zeichen.

Importiere ich die CSV Datei von Hand über PHPMyAdmin, so wird die Datei korrekt eingelesen.

Ich habs auch schonmal mit ENCLOSED BY ‘’ ESCAPED BY '' versucht, was mir aber nur einen Syntax Error gibt
Bitte warten ..
Mitglied: colinardo
14.08.2013 um 09:42 Uhr
Steht alles sehr gut erklärt in der Doku:
http://dev.mysql.com/doc/refman/5.1/de/load-data.html
kurzer Auszug:
Der Backslash wird bei MySQL als Escape-Zeichen in Strings verwendet. Insofern müssen Sie, um FIELDS ESCAPED BY '\\' zu schreiben, zwei Backslashes angeben, damit der Wert als ein Backslash interpretiert wird. 
Grüße Uwe
Bitte warten ..
Mitglied: ForgottenRealm
14.08.2013 um 11:23 Uhr
Moin

Mein CommandText sieht nun so aus

01.
cmd.CommandText = "LOAD DATA LOCAL INFILE '" & TV_Tabelle.Replace("\", "/") & "' INTO TABLE " & GetFileName(TV_Tabelle) & " FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\\' IGNORE 1 LINES"
Mit '\\' hatte ich es auch schon probiert, allerdings ohne Erfolg. Das Feld mit dem Windows Pfad enthält nach wie vor keine \.

Grüße
Bitte warten ..
Mitglied: colinardo
14.08.2013, aktualisiert um 11:41 Uhr
das meinte ich damit nicht, meinte damit das du in dem csv-File alle Backslash's mit Suchen und Ersetzen verdoppelst.
Normalerweise sollte ESCAPED BY '' aber funktionieren.
Auszug aus der Doku:
If the FIELDS ESCAPED BY character is empty, escape-sequence interpretation does not occur. 
kann es hier leider momentan nicht testen. Könnte natürlich sein das der MySQL-Interpreter für .Net das anders interpretiert. Muss ich später noch mal genauer nachsehen.
Grüße Uwe
Bitte warten ..
Mitglied: colinardo
14.08.2013, aktualisiert um 11:53 Uhr
du kannst mal versuchen ob es mit ESCAPED BY '\N' funktioniert ...wichtig ist das große "N"

habe ich noch gefunden:
A NULL value indicates the absence of a value or an unknown value, which is difficult to represent literally in a data file. For import and export purposes, MySQL use the convention of representing NULL by \N. For LOAD DATA INFILE, a \N appearing unquoted by itself as a column value is interpreted as NULL. MySQL users sometimes assume that an empty value in an input file will be handled as a NULL value, but that isn't true. For SELECT … INTO OUTFILE, MySQL writes NULL values to the output file as \N.
Bitte warten ..
Mitglied: ForgottenRealm
14.08.2013 um 12:34 Uhr
Hallo Uwe

ich glaube, ich habs mehr oder wenige durch einen Zufall rausbekommen.

Beim Import über phpmyadmin sind die Felder für ENCLOSED und ESCAPED mit einem Zeichen gefüllt, was ich bisher nie geändert habe. Die einzige Anpassung die ich vorgenommen hatte war, das Trennzeichen zu ändern und der Import (von Hand wohl gemerkt) ging wunderbar.

Ich dachte, in den Feldern seien zwei ' zu sehen, dies war allerdings ein ".

Dieses Zeichen habe ich statt den\\ in die ESCAPED BY ' " ' Regel eingebunden und siehe da, es funktioniert alles

Deswegen ging wohl auch der Import von Hand immer, da dort richtigerweise ein " drin stand.

Vielen Dank auf jeden Fall für deine Hilfe !

Grüße
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst Import CSV in MYSQL (3)

Frage von schneerunzel zum Thema Datenbanken ...

Visual Studio
gelöst VB.Net - Problem mit Umleitung der Standard-Ausgabe (4)

Frage von emeriks zum Thema Visual Studio ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...