| |
ADO.NET / DatenbankenSQL Befehle im VB Code (Bulk Insert) ausführen | | | Autor: Jenpet | Datum: 22.02.13 14:27 |
| Hallo,
ich weiss nicht genau, ob meine Frage hier in das Forum oder für Fortgeschrittene gehört.
Da ich aber noch nicht so lange mit VB arbeite, sondern früher mit C++ gearbeitet hab, frag ich einfach mal hier nach.
Ist es möglich dem Bulk Insert (http://msdn.microsoft.com/en-us/library/ms188365.aspx)
einen Parameter meiner Funktion mitzugeben?
Oder nachträglich einzufügen?
Meine Funktion sieht so aus
Private Sub createProcedure(ByVal columns As String, ByVal file As String)
Dim fileInfo As New System.IO.FileInfo(file)
Dim strSQL As String = "if exists (SELECT * FROM sys.objects WHERE name" & _
"= '" + procedureName + "') " _
+ "BEGIN " _
+ "drop procedure " + procedureName + " " _
+ "END "
Me.executeSQLQuery(strSQL)
Me.executeSQLQuery("SET QUOTED_IDENTIFIER OFF")
Me.executeSQLQuery("CREATE PROCEDURE " + procedureName + "" & _
"@PathFileName varchar(100)" + vbCrLf + "AS" + vbCrLf _
& "Set dateformat YMD" + vbCrLf + "DECLARE @SQL varchar(" & _
"500) BEGIN Set @SQL = " _
& """BULK INSERT " + tempTable + " From" & _
"'""+@PathFileName+""' WITH (FIRSTROW = 2, FORMATFILE" & _
"= '" + saveFormat + "');"" End EXEC (@SQL) " _
& "INSERT stats(" + columns + ") SELECT SUBSTRING(" + _
rows(0) + ",2,DATALENGTH(" + rows(0) + ")-1), " + _
columns.Substring(columns.IndexOf(",") + 1) + " FROM " _
+ tempTable)
End Sub Ich importiere die Werte aus meine CSV file (ByVal file As String) in eine Template Tabelle wo die meisten Spalten den Datentyp VARCHAR haben
und füge diese dann in meine richtige Tabelle in die die Daten konvertiert werden.
Das mache ich aus dem Grund, dass die orginalen CSV Dateien nicht angetastet werden und ich keine Schreibrechte in dem Bereich hab wo die Anwendung ausgeführt wird, bzw. keine neue Datei erstellen kann.
Das klappt alles wunderbar und ist extrem schnell, wenn man Millionen von Daten einfügen möchte.
Jedoch fehlt mir in dieser CSV Datei ein Wert der auch in die Spalten eingefügt werden soll.
Und zwar ist das der Name der Datei
Dim fileInfo As New System.IO.FileInfo(file) fileInfo.Name
Ich muss den Wert auch noch reinbekommen, aber ich schaffe es nicht mein Bulk Insert nachträglich zu verändern.
Ich hole mir alle Daten aus der Datei und was nicht drin ist schaff ich nicht nachträglich einzufügen.
Ich hab versucht diese Zeile zwischen dem Bulk Inser auszuführen
Me.executeSQLQuery("INSERT into stats(FileName) VALUES ('" + fileInfo.Name + _
"')") Aber hier wird einfach einmal eine einzelne Zeile in die Tabelle geschrieben, die überall den Wert NULL hat ausser bei FileName.
Ich brauch aber bei jeder Spalte in der Tabelle am ende in FileName diesen Wert und nicht nur einmal.
Ich hab mir überlegt ob ich nicht mein FormatFile, dass ich dem Bulk Inser mitgebe jedesmal änder und in der letzten Spalte das hier selbst einfüge
31 SQLCHAR 0 25 "\"\r\n" 36 FileName "" Aber dann bekomme ich immer Fehlermeldungen, weil in der CSV Datei diese Spalte fehlt.
Gibt es eine möglichkeit diese Information noch in den Bulk Inser zu bekommen oder evtl. nachträglich einzufügen, ohne dass der Import plötzlich wieder 90 Minuten statt wie jetzt 10 Minuten dauert?
Danke schon mal im Voraus. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|