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"); } }
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(); }
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); } }