„);
//using System.Data;
//using System.Data.SqlClient;
//using System.IO;
private void CSV_XML_nach_Datenbank(String dateiPfad, String ZielTabelle, SqlConnection con)
{
//knoxyz 14.11.2008
try
{
DateTime startzeit = System.DateTime.Now;
//stellt Vermittler zwischen DatenQuelle(sqlServer) und DatenZiel(DataSet/DataTable) dar
SqlDataAdapter da = new SqlDataAdapter();
//enthält Tabellen
DataSet ds = new DataSet();
SqlCommand cmd = new SqlCommand(); //der sqlCommand nimmt SQL-Befehle entgegen
cmd.Connection = con; //generell festlegen, für welche Datenbank er diese Befehle ausführen soll
//ggf Verbindung herstellen
if (con.State != ConnectionState.Open) con.Open();
String schemaPfad = Application.StartupPath + @"Schema_" + ZielTabelle + ".xsd";
//(Optional) Per TableMapping können Tabellen einen Namen gegeben werden. Alte Einträge entfernen
da.TableMappings.Clear();
//Welche Datenbankt
cmd.CommandText = "SELECT * FROM " + ZielTabelle;
da.SelectCommand = cmd;
da.TableMappings.Add("Table", ZielTabelle);
ds.Clear();
if (File.Exists(schemaPfad) == false) //Fall keine Schemadatei vorhanden ist, jetzt eine erstellen
{ //sofern Änderungen an der Datenbank gemacht wurden, die Schema.xsd einfach löschen
da.Fill(ds); //Tabellen des DataAdapter in ein DataSet schreiben
da.FillSchema(ds, SchemaType.Source); //Schema(Aufbau) der SQL-Tabellen auch im DataSet übernehmen
ds.WriteXmlSchema(schemaPfad); //Schema lokal speichern
}
//ds.WriteXml(schemaPfad + ".xml");//Schema und Daten lokal speichern (BackUp)
//Ziel-SQL-Tabelle
// anders als hier, schicke ich die Daten erst an eine Temp-Tabelle, die den gleichen Aufbau wie die eigentliche Ziel-Tabelle hat,
// und frage per Exist-Befehl anhand verschiedener Kriterien ab, ob Datensätze evtl. in der Ziel-Tab bereits vorhanden sind.
DataTable dt = new DataTable("Artikelstamm");
//um zu überprüfen ob die CVS-Daten zur SQL-Tabelle passen, hier das Schema der Datenbank übergeben
dt.ReadXmlSchema(schemaPfad);
//festlegen wo die CSV zu finden ist, die wir an die Datenbank schicken wollen
//Wurde eine eine 'xml-Datei' ausgesucht..
if (dateiPfad.EndsWith(".xml", StringComparison.OrdinalIgnoreCase))
{
dt.ReadXml(dateiPfad);
}
else
{
if (//...oder CSV/Textdatei?
(dateiPfad.EndsWith(".csv", StringComparison.OrdinalIgnoreCase))
|| (dateiPfad.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
)
{
StreamReader DateiLeser = new StreamReader(dateiPfad, System.Text.Encoding.Default);
//Die nachfolgende Replace-Aufrufe entfernen Sonderzeichen, die mögliche Probleme verursachen könnten
//Spaltenüberschriften auslesen und ggf. Punkte mit Unterstrich ersetzen
String Zeileninhalt = DateiLeser.ReadLine().Replace(".", "_").Replace("t", ";");
DateiLeser.ReadLine(); //Leerzeile falls Daten erst in 3ter Zeile beginnen
char trennzeichen = ';';
//Der Inhalt der CSV-Datei wird Zeile für Zeile ausgelesen und in eine DataTable geschrieben
while (DateiLeser.EndOfStream == false)
{
Zeileninhalt = DateiLeser.ReadLine().Replace("'", "").Replace(";", "").Replace("=", "").Replace("""
Alte URL:
/snippet/csv-und-xml-datei-datenbank-import-incl-valid-check/1011
Gibt es eine Möglichkeit sein „Snippet“ zu bearbeiten?
Diese usings werden benötigt:
using System.Data;
using System.Data.SqlClient;
using System.IO;
Hallo,
ja das geht, mit dem blauen Notizblock unter dem Snippet.
Jan
Dankeschön Jan 🙂
Der ConnectionString kann auch mit dem [b]SqlConnectionStringBuilder[/b] erstellt werden.
Gute Einwand den SqlConnectionStringBuilder zu benutzen,
da dieser, noch vor dem Versuch eine Verbindung aufzubauen,
überprüft, ob nur gültige Werte für die Verbindungseigenschaften angegeben wurden.
(Bsp: für TimeOut keine Buchstaben zugelassen, ect)
Habe es im Code entsprechend angepasst.