Laden...

Wo .replace() platzieren? [CSV to DB]

Erstellt von Dickus vor 9 Jahren Letzter Beitrag vor 9 Jahren 867 Views
D
Dickus Themenstarter:in
2 Beiträge seit 2010
vor 9 Jahren
Wo .replace() platzieren? [CSV to DB]

verwendetes Datenbanksystem: MS SQL 2008 R2 Express

Hallöle,
folgender Code schiebt mir die Inhalte einer CSV-Datei
in eine MS SQL (2008er R2 Express) Datenbank:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Data.SqlClient;
using System.IO;

namespace csv_to_db_03
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=.\SQLExpress; Initial Catalog=CsvToDb; Integrated Security=True;");
            string filepath = @"C:\zip\dummy.csv";
            StreamReader sr = new StreamReader(filepath);
            string line = sr.ReadLine();
            string[] value = line.Split(',');

            DataTable dt = new DataTable();
            DataRow row;
            foreach (string dc in value)
            {
                dt.Columns.Add(new DataColumn(dc));
            }
            
            while ( !sr.EndOfStream )
            {
                value = sr.ReadLine().Split(',');
                if(value.Length == dt.Columns.Count)
                {
                    row = dt.NewRow();
                    row.ItemArray = value;
                    dt.Rows.Add(row);
                }
            }
            SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
            bc.DestinationTableName = "Water";
            bc.BatchSize = dt.Rows.Count;
            con.Open();
            bc.WriteToServer(dt);
            bc.Close();
            con.Close();
        }
    }
}


Nun ist es leider so, dass die CSV-Datei die ich zur Verfügung
gestellt bekomme, alle Einträge in Gänsefüßchen hat.

"1","Viet Nam" ... usw.

An welcher Stelle des Codes müsste ich ein .replace() einfügen?
Oder gibt es eine andere Lösung?

Ich möchte ungern die CSV-Datei verändern.
Am besten ich entferne die " wenn die Daten im Speicher liegen.

Danke und Gruß aus dem hohen Norden
Dickus

Ein Leben ohne Z4 ist möglich, aber sinnlos...

1.696 Beiträge seit 2006
vor 9 Jahren

Hallo,

warum fragst du? Wer hindert dich daran, einfach auszuprobieren? Hinweis: du kannst die Aktion mit dem DB-Eintrag bei deinem Testlauf zunächst auskommentieren und im Debugger einfach gucken, ob die Datenvorbereitung wie gewünscht abläuft.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

M
402 Beiträge seit 2005
vor 9 Jahren

Hi...

bing mal nach "c# parse csv with text qualifier".

Du musst nämlich auch bedenken dass in Text-Spalten eventuell auch noch zusätzliche Anführungszeichen (wenn auch escaped) enthalten sein können.

Und die wären mit einem "Replace()" auch alle weg.

lg

2.078 Beiträge seit 2012
vor 9 Jahren

Stichwort Trim

Ich vermute aber mal, es gibt bestimmt schon was zum einlesen von CSVs gibt.

D
Dickus Themenstarter:in
2 Beiträge seit 2010
vor 9 Jahren

Hallöle,

danke für die Hinweise.
Habe den Code entsprechend geändert und nun ist
alles in Butter. Trim war der richtige Hinweis.
Replace brauchte ich gar nicht 😃

Was den Hinweis von M@TUK angeht
("c# parse csv with text qualifier"),
so habe ich schon etwas gefunden, aber
noch nicht implementiert.

Wie es aber nun mal im Berufsleben so ist,
haben jetzt andere Projekt Priorität und die
Programmierung muss erst einmal wieder
pausieren.

Vielen Dank und Gruß
Dickus

Ein Leben ohne Z4 ist möglich, aber sinnlos...