Laden...

Beim Einfügen in eine Tabelle bleibt diese leer

Erstellt von Shaft vor 12 Jahren Letzter Beitrag vor 12 Jahren 633 Views
S
Shaft Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren
Beim Einfügen in eine Tabelle bleibt diese leer

Hallo zusammen...ich bin noch ein Anfänger und habe eine Frage zu Parameterübergabe für SQL Statements.
Ich lese eine Datei aus und speichere die Ergebnisse (Strings) in einer Liste. Danach will ich durch die Liste itterieren und die Ergebnisse in eine Datenbank einfügen. Das Programm führt auch alles aus, aber die Tabelle bleibt leer(ausser die Autowerte).

Hier der Code den ich verbrochen habe


namespace DataBaseInsert
{
    class Program
    {
        static void Main(string[] args)
        {
            string satz = null;
            int counter  = 0;
            List<string> daten = new List<string>();
            FileStream stream = new FileStream(@"E:\Berufe.txt", FileMode.Open);
            StreamReader sr = new StreamReader(stream, Encoding.Default);

             
            
            while (sr.ReadLine() != null)
            {
                satz = sr.ReadLine().ToString();
                daten.Add(satz);
                counter++;
            }
            Console.WriteLine(counter);

            Console.Read();

                     

          SqlConnection con = new SqlConnection(@"Data Source=WKS\SQLEXPRESS;  Initial Catalog = Test; Integrated Security = SSPI");
            SqlCommand cmd = new SqlCommand(@"INSERT INTO tbl_Berufe (Name) VALUES (@satz)", con);
            SqlParameter param = new SqlParameter();
            param.ParameterName = "@satz";
            param.Value = satz;
            cmd.Parameters.Add(param);

            try
            {
                con.Open();
                for (int i = 0; i < counter; i++)
                {
                    satz = daten[i];
                    Console.WriteLine(satz);
                    cmd.ExecuteNonQuery();

                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);

            }
            finally
            {
                con.Close();
                sr.Close();
            }

G
538 Beiträge seit 2008
vor 12 Jahren

Willkommen im Forum

Also erstmal folgendes:

Console.ReadLine ist nicht nötig zum Anhalten - du kannst einfach einen Breakpoint setzen und dann mit dem Debugger anhalten.
Dann liest du eine ganze Datei - einfügen tust du aber nur die letzte gelesene Zeile (die sehr oft leer ist, weil jemand ein Enter am Ende hinzugefügt hat).

Der Debugger hätte dir das im Übrigen sehr schön gezeigt, denn mit dem kannst du schritt für SChritt durchgehen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

S
Shaft Themenstarter:in
20 Beiträge seit 2011
vor 12 Jahren

Danke erst mal...mittlerweile auch festgestellt das der erste Fehler beim auslesen der Datei passiert..irgendwie nehme ich nicht alle Zeilen mit

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo Shaft,

.irgendwie nehme ich nicht alle Zeilen mit

weil du im while (..) bereits ein ReadLine hast, also wird dort schon eine Zeile gelesen, allerdings dieses Ergebnis nicht verwendet und so verworfen. Verwende besser


while (!sr.EndOfStream)
{
    // hier der restliche Code
}

und ReadLine gibt bereits einen String zurück, also in ein ToString nicht notwendig.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

C
2.121 Beiträge seit 2010
vor 12 Jahren

Fehlt noch der Hinweis dass du dem Parameter einmalig "satz" zuweist.
Dem Parameter gehört vor jedem Execute der zu schreibende Wert zugewiesen.