Die Daten einer Windows Form Application (C#) in eine SQL Datenbank speichern

Das ist in einer anderen Klasse
Muss das auch hier beim aufruf des inserts sein****
Ist der rest in ordnung? bzw sind noch andere Fehler in meinem Code?
 
Du legst hier das Command-Objekt an. Führst den Command aber nicht aus. Wenn du an anderer Stelle das Execute des Command aufrufst, wird dies auch ein anderer Command sein!

Hast du dir das Beispiel in der MSDN angeschaut und es auf deine Umgebung adaptiert?
 
hab das nun so probiert:
wie geht der aufruf?
ist das richtig****

Code:
 public static int ExecuteNonQuery(string sql)
        {
            string connectionString = "SERVER=DAUTSQL01.fremont.lamrc.net; Database=Visitors; User ID=VisitorDB; Password=9AbU5ApHa;";
            SqlConnection connection = new SqlConnection(connectionString);

            try
            {
                connection.ConnectionString = connectionString;
                connection.Open();
                SqlCommand command = new SqlCommand(sql, connection);
                return command.ExecuteNonQuery();
            }
            catch (Exception a)
            {
                if (a.Source != null)
                    Console.WriteLine("IOException source: {0}", a.Source);
                throw;
            }
            finally
            {
                connection.Close(); 
            }
        }

        public void buttonSpeichern_Click(object sender, EventArgs e)
        {
            string connectionString = "SERVER=DAUTSQL01.fremont.lamrc.net; Database=Visitors; User ID=VisitorDB; Password=9AbU5ApHa;";
            SqlConnection connection = new SqlConnection(connectionString);

            InsertBesucher(connection); 


        }

        public static SqlDataAdapter InsertBesucher(SqlConnection connection)
        {
            SqlDataAdapter adapter = new SqlDataAdapter();

            SqlCommand command = new SqlCommand("INSERT INTO visitor_database (first_name, last_name, screening_result, license_plate, personal_document, fknation, fkcompany, fkcategory) " + "VALUES (@first_name, @last_name, @screening_result, @license_plate, @personal_document, @fknation, @fkcompany, @fkcategory)", connection);

            
            command.Parameters.Add("@first_name", SqlDbType.VarChar, 75, "Vorname"); 
            command.Parameters.Add("@last_name", SqlDbType.VarChar, 75, "Nachname");
            command.Parameters.Add("@screening_result", SqlDbType.Bit, 1);
            command.Parameters.Add("@license_plate", SqlDbType.VarChar, 50, "Kennzeichen");
            //command.Parameters.Add("@personal_document", SqlDbType.VarBinary, max);
            command.Parameters.Add("@fknation", SqlDbType.Int, 2); 
            command.Parameters.Add("@fkcompany", SqlDbType.Int, 2); 
            command.Parameters.Add("@fkcategory", SqlDbType.Int, 2); 

            return adapter; 

        }
 
Hi

Nochmal: Du erzeugst einen weiteren SqlCommand, der andere Informationen enthält, als der in "InsertBesucher"! Ruf da ExecuteNonQuery auf!

Und ich geb dir nochmal den Hinweis mit dem Beispiel in der MSDN! Mach dir eine kleine Konsolenanwendung, die diese Beispiel enthält und pack es dann in deine WinForms Anwendung!
 
Ich habe das schon drei mal probiert und keine ahnung wo ich einen weiteren SQLCommand erzeuge**** bzw was ich verändern muss?
 
Hi

Hier erzeugst du Command 1 und führst ihn aus!
C#:
 public static int ExecuteNonQuery(string sql)
        {
            string connectionString = "SERVER=DAUTSQL01.fremont.lamrc.net; Database=Visitors; User ID=VisitorDB; Password=9AbU5ApHa;";
            SqlConnection connection = new SqlConnection(connectionString);

            try
            {
                connection.ConnectionString = connectionString;
                connection.Open();
                SqlCommand command = new SqlCommand(sql, connection);
                return command.ExecuteNonQuery();
            }
            catch (Exception a)
            {
                if (a.Source != null)
                    Console.WriteLine("IOException source: {0}", a.Source);
                throw;
            }
            finally
            {
                connection.Close(); 
            }
        }
Hier erzeugst du Command 2 inkl. allen drum und dran und führst ihn nicht aus.
C#:
        public static SqlDataAdapter InsertBesucher(SqlConnection connection)
        {
            SqlDataAdapter adapter = new SqlDataAdapter();

            SqlCommand command = new SqlCommand("INSERT INTO visitor_database (first_name, last_name, screening_result, license_plate, personal_document, fknation, fkcompany, fkcategory) " + "VALUES (@first_name, @last_name, @screening_result, @license_plate, @personal_document, @fknation, @fkcompany, @fkcategory)", connection);

            
            command.Parameters.Add("@first_name", SqlDbType.VarChar, 75, "Vorname"); 
            command.Parameters.Add("@last_name", SqlDbType.VarChar, 75, "Nachname");
            command.Parameters.Add("@screening_result", SqlDbType.Bit, 1);
            command.Parameters.Add("@license_plate", SqlDbType.VarChar, 50, "Kennzeichen");
            //command.Parameters.Add("@personal_document", SqlDbType.VarBinary, max);
            command.Parameters.Add("@fknation", SqlDbType.Int, 2); 
            command.Parameters.Add("@fkcompany", SqlDbType.Int, 2); 
            command.Parameters.Add("@fkcategory", SqlDbType.Int, 2); 

            return adapter; 

        }
Ich sage dir: Führ den letzten aus! Wo, wann und ob der obere Code überhaupt ausgeführt wird weiß ich nicht. Da auch nicht zu erkennen ist, was in "sql" steht, ist eine Ferndiagnose eher unmöglich

Die Empfehlung mit dem Beispiel bleibt! Weitere Tipps erst, wenn du dir das angeschaut und ausprobiert hast (siehe Post 14)
 
brauche bitte nur noch ein wenig hilfe dann solte es klappen
das speichern funktionier aktuelle
nur wie speichere ich jetzt in zwei tabellen?
wie sieht die übergabe der parameter dann aus?

Code:
        public static int ExecuteNonQuery(string sql)
        {
            string connectionString = "SERVER=DAUTSQL01.fremont.lamrc.net; Database=Visitors; User ID=VisitorDB; Password=9AbU5ApHa;";
            SqlConnection connection = new SqlConnection(connectionString);

            try
            {
                connection.ConnectionString = connectionString;
                connection.Open();
                SqlCommand command = new SqlCommand(sql, connection);
                return command.ExecuteNonQuery();
            }
            catch (Exception a)
            {
                if (a.Source != null)
                    Console.WriteLine("IOException source: {0}", a.Source);
                throw;
            }
            finally
            {
                connection.Close();
            }
        }

      

        public void buttonSpeichern_Click(object sender, EventArgs e)
        {
            string first = textBoxVorname.Text;
            string last = textBoxNachname.Text;
            int fkcategory = 1; 
            

            if (first == "" || last == "")
            {
                MessageBox.Show("Please ensure all fields are entered", "Error");
            }
            else
            {
                SqlConnection dataConnection = new SqlConnection();
                dataConnection.ConnectionString = @"SERVER=DAUTSQL01.fremont.lamrc.net; Database=Visitors; User ID=VisitorDB; Password=9AbU5ApHa;";
                
                SqlCommand dataCommand = new SqlCommand();
                dataCommand.Connection = dataConnection;

                dataCommand.CommandText = ("INSERT visitor_database (first_name, last_name, fkcategory) VALUES (@first, @last, @fkcategory)");

                dataCommand.Parameters.AddWithValue("@first", first);
                dataCommand.Parameters.AddWithValue("@last", last);
                dataCommand.Parameters.AddWithValue("@fkcategory", fkcategory);

                dataConnection.Open();
                dataCommand.ExecuteNonQuery(); 
            }
        }
 
Zuletzt bearbeitet:
Genauso?!

Ich würde dich bitten Ratschläge, die man die mehrfach gibt anzunehmen oder wenigstens eine Reaktion darauf zu zeigen! Ich hab dir mehrfach den Hinweis mit der MSDN gegeben!
Außerdem ist hier im Forum in vielen Threads das Galileo-Openbook "Visual C#" verlinkt, dass einen sehr guten Einstieg in die diversen Thmen liefert. :google:

Und auch jetzt nochmal der Hinweis: Erstelle eine kleine Konsolenanwendung, mit der du die Datenbankzugriffe erstmal ausprobierst! Wenn du Anfänger bist solltest du nicht mehrere Komplexitätsstufen auf einmal angehen, was du hier mit WinForms aber machst!
 
Zurück