Jeden INSERT a tworzą się dwa wiersze. Dlaczego?

0

Witam Forumowiczów

proszę Was o pomoc w pewnej sprawie.

Wywołuje eventa (c# windows form) którego zadaniem jest dodanie do bazy danych MySQL INSERTA...

Zamiast 1 wpisuj tworzą się 2 identyczne wpisy (różnią się tylko autoincrementem)

Nie wiem dlaczego INSERT jest duplikowany. Sprawdzałem Console.WriteLine... i tutaj polecenie wykonuje się tylko 1 raz. Natomiast w bazie tworzą się 2 wiersze.

 
void schedulerStorage_AppointmentInserting(object sender, PersistentObjectCancelEventArgs e)
        {
            Console.WriteLine("AppointmentInserting");
            Appointment apt = e.Object as Appointment;
            if (apt != null)
            {
                string rem = "";
                string res = "";
                string losowa = RandomString(10);
                try
                {
                    if (apt.HasReminder == true)
                    {
                        rem = "<Reminders><Reminder AlertTime=\"" + apt.Reminder.AlertTime + "\" /></Reminders>";
                    }
                    else
                    {
                        rem = "";
                    }
                    res = "<ResourceIds><ResourceId Type=\"System.Int32\" Value=\""+ apt.ResourceId + "\" /></ResourceIds>";
                }
                catch { }
                Console.WriteLine(losowa);
                wykonaj_zapytanie_sql("INSERT INTO `terminarz_appointments` (`Subject`,`StartTime`,`EndTime`,`Description`,`Location`,`Label`,`Status`,`AllDay`,`ReminderInfo`,`EventType`,`ResourceId`,`id_losowa`) VALUES('" + apt.Subject + "', '" + apt.Start + "', '" + apt.End + "', '" + apt.Description + "', '" + apt.Location + "', '" + apt.LabelId + "', '" + apt.StatusId + "', '" + apt.AllDay + "', '" + rem + "', '" + res + "' , '" + res + "', '" + losowa + "');");
                
            }
        }


private void wykonaj_zapytanie_sql(string zapytanie)
        {
            try
            {
                try { global_mysql_rdr.Close(); global_mysql_cmd.Dispose(); global_mysql_conn.Close(); }
                catch { }
                global_mysql_conn = new MySqlConnection(connectionString);
                global_mysql_conn.Open();
                Console.WriteLine(zapytanie);
                global_mysql_cmd = new MySqlCommand(zapytanie, global_mysql_conn);
                global_mysql_rdr = global_mysql_cmd.ExecuteReader();
            }
            catch
            {
                try { global_mysql_rdr.Close(); global_mysql_cmd.Dispose(); global_mysql_conn.Close(); }
                catch { }
            }
            finally
            {
                try { global_mysql_rdr.Close(); global_mysql_cmd.Dispose(); global_mysql_conn.Close(); }
                catch { }
            }
        }

1

Całe życie na try catch'u. ;) Kod masakra... A o debuggerze nie słyszał że Console.WriteLine używa? :)

Najprawdopodobniej skoro wszystko masz globalne to pewnie w którymś miejscu zapomniałeś dać global_mysql_cmd = new ... i wykonuje się stare zapytanie.

0

Wstaw breakpoint w linijce global_mysql_rdr = global_mysql_cmd.ExecuteReader(); i sprawdź jakie zapytanie będzie wykonane.
A kolejna sprawa nie masz jakiegos triggera after insert na tej tabeli ?

A po za tematem: jak często Twoja aplikacja wysyła jakieś zapytania używając tej metody ? (czy na pewno tworzenie/zamykanie połączenia za każdym razem jest optymalne ? )

1 użytkowników online, w tym zalogowanych: 0, gości: 1