Пример #1
0
        public void dodaj_wynik(Wynik w, SqlConnection m_connection)
        {
            string connectionString = "Data Source=DESKTOP-K6OJ71S;Initial Catalog=CINEMA;" + "Integrated Security=true";

            string queryString = "insert into Wynik(Konflikt, Opoznienie, StartT, StopT) values(@konflikt, @opoznienie, @start, @stop)";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // Create the Command and Parameter objects.
                SqlCommand command = new SqlCommand(queryString, m_connection);

                command.Parameters.AddWithValue("konflikt", w.w_konflikt);
                command.Parameters.AddWithValue("opoznienie", w.w_opoznienie);
                command.Parameters.AddWithValue("start", w.w_start);
                command.Parameters.AddWithValue("stop", w.w_stop);

                command.ExecuteNonQuery();
                Console.WriteLine("Dodano do tabeli wynikowej");
            }
        }
Пример #2
0
        public void TransakcjaOptimistic()
        {
            t_wynik = new Wynik();

            int[] wolne;
            int   miejsce;


            Random r = new Random();

            using (m_connection = new SqlConnection(connectionString))
            {
                m_connection.Open();

                wolne = wolne_miejsca_update(null);               //TU PIERWSZA TRANSAKCJA

                if (wolne == null)
                {
                    Console.WriteLine("Brak wolnych ");
                    return;
                }

                miejsce = r.Next(1, wolne.Length);

                System.Threading.Thread.Sleep(r.Next(1000, 5001));

                SqlCommand     command_select = m_connection.CreateCommand();
                SqlTransaction transaction_select;


                t_wynik.w_start = DateTime.Now;                      //czas rozpoczęcia
                // Start a local transaction.
                transaction_select = m_connection.BeginTransaction("SampleTransaction");
                Console.WriteLine("Rozpoczecie transakcji dla selecta ");

                // Must assign both transaction object and connection
                // to Command object for a pending local transaction
                command_select.Connection  = m_connection;
                command_select.Transaction = transaction_select;                       //TRANSAKCJA DLA PIERWSZEGO SELECTA

                wolne = wolne_miejsca_update(transaction_select);

                if (wolne == null)
                {
                    Console.WriteLine("Brak wolnych");
                    transaction_select.Rollback();
                    //info
                }
                else
                {
                    int czas_op = r.Next(1000, 5000);
                    System.Threading.Thread.Sleep(czas_op);


                    if (wolne.Contains(miejsce))
                    {
                        command_select.CommandText = "select NrMiejsca from Zamowienie where StatusB = 0;";
                        wolne = wolne_miejsca_update(transaction_select);
                        command_select.ExecuteNonQuery();
                        Console.WriteLine("Transakcja selecta na poziomie izolacji: {0}", transaction_select.IsolationLevel.ToString());
                        transaction_select.Commit();
                        Console.WriteLine("Skommitowano transakcję selecta dla miejsca");
                    }

                    else
                    {
                        //info ze w miedzyczasie zost sprzedane
                        Console.WriteLine("Transakcja selecta nie doszla do skutku");
                        transaction_select.Rollback();
                        t_wynik.w_konflikt = true;
                    }
                    t_wynik.w_stop = DateTime.Now;
                    TimeSpan czas = t_wynik.w_stop - t_wynik.w_start;
                    t_wynik.w_opoznienie = daj_metode.policzOpoznienie(czas, miejsce);

                    // tu od timera odjac randomowy czas opoznienia
                    // Console.WriteLine("Czas transakcji selecta wynosi: {1}", czas.TotalMilliseconds);//timer.ElapsedMilliseconds.ToString());
                }
                daj_metode.dodaj_wynik(t_wynik, m_connection);
            }

            using (m_connection_insert = new SqlConnection(connectionString))
            {
                m_connection_insert.Open();
                SqlCommand     command_insert = m_connection_insert.CreateCommand();
                SqlTransaction transaction_insert;

                ///////////////////////////druga transakcja///////////////////////////////////////
                transaction_insert        = m_connection_insert.BeginTransaction("InsertTransaction");
                command_insert.Connection = m_connection_insert;

                command_insert.Connection  = m_connection_insert;
                command_insert.Transaction = transaction_insert;

                if (wolne == null)
                {
                    Console.WriteLine("Brak wolnych");
                    transaction_insert.Rollback();
                    //info
                }
                else
                {
                    int czas_op = r.Next(1000, 5000);
                    System.Threading.Thread.Sleep(czas_op);


                    if (wolne.Contains(miejsce))
                    {
                        command_insert.CommandText = "Insert into Zamowienie (IDSeansu, NrMiejsca, StatusB, NazwaKlienta) VALUES (1, " + miejsce + ", 1, 'nazwakli')";
                        command_insert.ExecuteNonQuery();

                        Console.WriteLine("Transakcja insert miejsca {0} na poziomie izolacji: {1}", miejsce, transaction_insert.IsolationLevel.ToString());
                        transaction_insert.Commit();
                        Console.WriteLine("Skommitowano transakcję insert dla miejsca: {0}", miejsce);
                    }

                    else
                    {
                        //info ze w miedzyczasie zost sprzedane
                        Console.WriteLine("Transakcja insert dla miejsca {0} nie doszla do skutku,", miejsce);
                        transaction_insert.Rollback();
                        t_wynik.w_konflikt = true;
                    }
                    t_wynik.w_stop = DateTime.Now;
                    TimeSpan czas = t_wynik.w_stop - t_wynik.w_start;
                    t_wynik.w_opoznienie = daj_metode.policzOpoznienie(czas, miejsce);

                    // tu od timera odjac randomowy czas opoznienia
                    Console.WriteLine("Czas transakcji insert dla miejsca {0} wynosi: {1}", miejsce, czas.TotalMilliseconds);//timer.ElapsedMilliseconds.ToString());
                }

                daj_metode.dodaj_wynik(t_wynik, m_connection_insert);
            }

            //using (m_connection_update = new SqlConnection(connectionString))
            //{
            //    m_connection_update.Open();
            //    SqlCommand command_update = m_connection_update.CreateCommand();
            //    SqlTransaction transaction_update;

            //    transaction_update = m_connection_update.BeginTransaction("UpdateTransaction");
            //    command_update.Connection = m_connection_update;

            //    command_update.Connection = m_connection_update;
            //    command_update.Transaction = transaction_update;

            //    if (wolne == null)
            //    {
            //        Console.WriteLine("Brak wolnych");
            //        transaction_update.Rollback();
            //        //info
            //    }
            //    else
            //    {
            //        int czas_op = r.Next(1000, 5000);
            //        System.Threading.Thread.Sleep(czas_op);

            //        if (wolne.Contains(miejsce))
            //        {
            //            command_update.CommandText = "UPDATE Zamowienie SET StatusB = '0' WHERE IDZamowienia = " + t_id + "; ";
            //            command_update.ExecuteNonQuery();
            //            Console.WriteLine("Transakcja update miejsca {0} na poziomie izolacji: {1}", miejsce, transaction_update.IsolationLevel.ToString());

            //            transaction_update.Commit();
            //            Console.WriteLine("Skommitowano transakcję update dla miejsca: {0}", miejsce);
            //        }
            //        else
            //        {
            //            //info ze w miedzyczasie zost sprzedane
            //            Console.WriteLine("Transakcja update dla miejsca {0} nie doszla do skutku,", miejsce);
            //            transaction_update.Rollback();
            //            t_wynik.w_konflikt = true;
            //        }

            //        t_wynik.w_stop = DateTime.Now;
            //        TimeSpan czas = t_wynik.w_stop - t_wynik.w_start;
            //        t_wynik.w_opoznienie = daj_metode.policzOpoznienie(czas, miejsce);

            //        // tu od timera odjac randomowy czas opoznienia
            //        Console.WriteLine("Czas transakcji update dla miejsca {0} wynosi: {1}", miejsce, czas.TotalMilliseconds);//timer.ElapsedMilliseconds.ToString());

            //    }
            //    daj_metode.dodaj_wynik(t_wynik, m_connection_update);
            //}



            ///////////////////////////////////////dla wielu//////////////////////////////////

            miejsca = new int[r.Next(4)];

            for (int i = 0; i < miejsca.Length; i++)
            {
                miejsca[i] = r.Next(1, wolne.Length);

                using (m_connection_update = new SqlConnection(connectionString))
                {
                    m_connection_update.Open();
                    SqlCommand     command_update = m_connection_update.CreateCommand();
                    SqlTransaction transaction_update;

                    transaction_update        = m_connection_update.BeginTransaction("UpdateTransaction");
                    command_update.Connection = m_connection_update;

                    command_update.Connection  = m_connection_update;
                    command_update.Transaction = transaction_update;

                    if (wolne == null)
                    {
                        Console.WriteLine("Brak wolnych");
                        transaction_update.Rollback();
                        //info
                    }
                    else
                    {
                        int czas_op = r.Next(1000, 5000);
                        System.Threading.Thread.Sleep(czas_op);

                        if (wolne.Contains(miejsca[i]))
                        {
                            int m = miejsca[i];
                            command_update.CommandText = "UPDATE Zamowienie SET StatusB = '0' WHERE NrMiejsca = " + m + "; ";
                            command_update.ExecuteNonQuery();
                            Console.WriteLine("Transakcja update miejsca {0} na poziomie izolacji: {1}", miejsca[i], transaction_update.IsolationLevel.ToString());

                            transaction_update.Commit();
                            Console.WriteLine("Skommitowano transakcję update dla miejsca: {0}", miejsca[i]);
                        }
                        else
                        {
                            //info ze w miedzyczasie zost sprzedane
                            Console.WriteLine("Transakcja update dla miejsca {0} nie doszla do skutku,", miejsca[i]);
                            transaction_update.Rollback();
                            t_wynik.w_konflikt = true;
                        }

                        t_wynik.w_stop = DateTime.Now;
                        TimeSpan czas = t_wynik.w_stop - t_wynik.w_start;
                        t_wynik.w_opoznienie = daj_metode.policzOpoznienie(czas, miejsca[i]);

                        // tu od timera odjac randomowy czas opoznienia
                        Console.WriteLine("Czas transakcji update dla miejsca {0} wynosi: {1}", miejsca[i], czas.TotalMilliseconds);//timer.ElapsedMilliseconds.ToString());
                    }
                    daj_metode.dodaj_wynik(t_wynik, m_connection_update);
                }

                m_connection_update.Close();
            }


            m_connection.Close();
            m_connection_insert.Close();
            //m_connection_update.Close();
        }
Пример #3
0
        public void Start()
        {
            t_wynik = new Wynik();

            using (m_connection = new SqlConnection(connectionString))
            {
                m_connection.Open();

                int[] wolne = wolne_miejsca_update(null);

                if (wolne == null)
                {
                    Console.WriteLine("Brak wolnych ");
                    return;
                }
                Random r       = new Random();
                int    miejsce = r.Next(1, wolne.Length);

                System.Threading.Thread.Sleep(r.Next(1000, 5001));

                SqlCommand     command_insert = m_connection.CreateCommand();
                SqlCommand     command_update = m_connection.CreateCommand();
                SqlTransaction transaction;

                t_wynik.w_start = DateTime.Now;                      //czas rozpoczęcia
                // Start a local transaction.
                transaction = m_connection.BeginTransaction("SampleTransaction");
                Console.WriteLine("Rozpoczecie transakcji dla miejsca {0}: ", miejsce);

                // Must assign both transaction object and connection
                // to Command object for a pending local transaction
                command_update.Connection  = m_connection;
                command_update.Transaction = transaction;

                wolne = wolne_miejsca_update(transaction);

                if (wolne == null)
                {
                    Console.WriteLine("Brak wolnych");
                    transaction.Rollback();
                    //info
                }
                else
                {
                    int czas_op = r.Next(1000, 5000);
                    System.Threading.Thread.Sleep(czas_op);


                    if (wolne.Contains(miejsce))
                    {
                        command_insert.CommandText = "Insert into Zamowienie (IDZamowienia, IDSeansu, NrMiejsca, StatusB, NazwaKlienta) VALUES (" + t_id + "3, 1, " + miejsce + ", 1, 'nazwakli')";
                        command_update.CommandText = "UPDATE Zamowienie SET StatusB = '0' WHERE IDZamowienia = " + t_id + "; ";
                        command_update.ExecuteNonQuery();
                        Console.WriteLine("Transakcja miejsca {0} na poziomie izolacji: {1}", miejsce, transaction.IsolationLevel.ToString());
                        transaction.Commit();
                        Console.WriteLine("Skommitowano transakcję dla miejsca: {0}", miejsce);
                    }

                    else
                    {
                        //info ze w miedzyczasie zost sprzedane
                        Console.WriteLine("Transakcja dla miejsca {0} nie doszla do skutku,", miejsce);
                        transaction.Rollback();
                        t_wynik.w_konflikt = true;
                    }
                    t_wynik.w_stop = DateTime.Now;
                    TimeSpan czas = t_wynik.w_stop - t_wynik.w_start;
                    t_wynik.w_opoznienie = daj_metode.policzOpoznienie(czas, miejsce);

                    // tu od timera odjac randomowy czas opoznienia
                    Console.WriteLine("Czas transakcji dla miejsca {0} wynosi: {1}", miejsce, czas.TotalMilliseconds); //timer.ElapsedMilliseconds.ToString());
                }
                daj_metode.dodaj_wynik(t_wynik, m_connection);
            }
        }