Obsługa wyjątku podczas logowania C#

0

Próbuję zrobić obsługę wyjątku podczas logowania się (podania nazwy serwera)

SqlConnection conn;
        SqlConnectionStringBuilder connstring;

        public Test_polaczenia(string nazwa_serwera)
        {
            InitializeComponent();
            label2.Text = nazwa_serwera;    //logowanie
            connstring = new SqlConnectionStringBuilder();
            connstring.InitialCatalog = "prace_zaliczeniowe";

            try
            {
                 
                
                
                connstring.DataSource = nazwa_serwera;
                connstring.IntegratedSecurity = true;
                conn = new SqlConnection(connstring.ConnectionString);
            }
            catch (Exception ex)
            {
                conn.Open();
                
            }
            finally
            {
                
                if (label1.Text.Equals("Open"))
                {
                    label2.Text = "Test połączenia powiódł się";
                    label2.BackColor = Color.Green;
                }
                else
                {
                    label2.Text = "Test połączenia nie powiódł się";
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            conn.Close();
            label1.Text = conn.State.ToString();
            Close();
        }

Bez obsługi wyjątku program się zawiesza po wpisaniu złej nazwy serwera. A teraz z tym kodem powyżej nigdy się nie chce połączyć, nawet jak podam dobrąnazwę serwera...

0

Hmm, przenieś Open() w sekcję try { } , a poza tym to nie operuj na magicznych stringach typu label.Text.Equals("Open"), bo już gorzej się nie da - użyj wyjątków.

0

Poczytaj troche o try catch :)

W złym miejscu umiesciłeś conn.Open() powinno być ono wewnątrz try. Nigdy sie nie laczylo poniewaz otwierales polaczenie w obsłudze wyjątku do ktorej nigdy nie dochodzilo.

            try
            {
                connstring.DataSource = nazwa_serwera;
                connstring.IntegratedSecurity = true;
                conn = new SqlConnection(connstring.ConnectionString);
                conn.Open(); //Jeżeli podasz zła nazwe serwera wtedy wyskoczy wyjątek
            }
            catch (Exception ex)
            {
                //tutaj obsługujesz wyjątek
                label2.Text = "Zła nazwa serwera";  
            }
0

Dzięki za odpowiedzi. Dałem otwarcie połączenia do try, ale dalej się zawiesza program

public Test_polaczenia(string nazwa_serwera)
        {
            InitializeComponent();
            label2.Text = nazwa_serwera;    
            connstring = new SqlConnectionStringBuilder();
            connstring.InitialCatalog = "prace";

            try
            {
                connstring.DataSource = nazwa_serwera;
                connstring.IntegratedSecurity = true;
                conn = new SqlConnection(connstring.ConnectionString);
                conn.Open(); 
            }
            catch (Exception ex)
            {
                
                label2.Text = "Zła nazwa serwera";
                  
            }
            finally
            {
                label1.Text = conn.State.ToString();
               conn.Close();
            }
        }

private void button1_Click(object sender, EventArgs e)
        {
            
            
            Close();
        }
0

A co ci tu obsluga wyjatku pomoze? Sposób łączenia się nie zmienił, tyle że w przypadku błedu skoczy do catch zamiast się wywalić.
Jeżeli chcesz zeby program się nie "zawieszał" to daj łączenie w wątku lub użyj chociażby BackgroundWorker. A tak poza tym to dobrze by była w catch-u jednak dać tekst błędu bo niekoniecznie to musi być zła nazwa serwera.

0

A co ci tu obsluga wyjatku pomoze?

Myślałem, że właśnie do tego są te wyjątki, ale dopiero się ucze :)
Będę dalej próbował...

0

wątki (threads) są od tego , nie wyjątki (exceptions) :). Puszczasz czasochłonne operacje aby się wykonywały w innym wątku a nie zawieszały główny wątek.

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