Wątek przeniesiony 2017-05-09 17:54 z C# i .NET przez Patryk27.

Sprawdzenie spójności loginu z danymi z bazy Oracle

0

Hej, męczę się z tym już trochę. Przeszukałem kilkadziesiąt forum o tym ale żadna 'podpowiedź' nie jest prawidłowa. Żadna mi nie pomogła, więc dlatego zwracam się z prośbą tutaj. Chciałbym sprawdzić czy login podany przez użytkownika jest taki sam jak w bazie danych Oracle. Zapytanie SQL działa owszem ale nawet jak podam nie prawidłowe dane to i tak działa. Zaznaczę jeszcze, że pracuje nad windows forms application i że baza Oracle działa i łączy się z kodem C# . Na razie mam coś takiego:

private void button1_Click(object sender, EventArgs e)
        {

            string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=XE)));User Id=hr;Password=hr;";

            OracleConnection conn = new OracleConnection(oradb); // C#

            conn.Open();

            OracleCommand cmd = new OracleCommand();

            cmd.Connection = conn;

            //cmd.Parameters.Add(new OracleParameter("@user_name", textBox1.Text));

            cmd.CommandText = "select login_name,password from users";

            OracleDataReader dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                label3.Text = "Awesome!";
            }
            else
            {
                label3.Text = "Not found";
            }

            conn.Dispose();
        }

Teraz Chciałbym sprawdzić czy jeśli podam Login i hasło poprawne np. L:admin H:123 ;to w label3 wypisze mi "Awesome" a jeśli napisze nie poprawne dane to wypisze mi w label3 "Not found". Z tego co wyczytałem (chyba) nie jestem pewny trzeba użyć OracleParameter.. **Zaznaczam, że jestem uczącym się nie krzyczcie proszę ;p **

0

Możesz mi pokazać wprost, gdzie w tym Twoim zapytaniu masz jakieś filtrowanie?

0

Na temat odpowiadaj w postach.

A jak w samym SQLu pobrałbyś hasło dla użytkownika o nicku np. wtc_nine_eleven?

0

select password from users where login_name='wtc_nine_eleven'; Myślę, że użyłbym czegoś takiego.

0

Yep - teraz pozostaje tylko poczytać o bindowaniu danych w C# (tak się ten termin fachowo nazywa; c# sql bind w Google) i połączyć jedno z drugim :)

0

https://msdn.microsoft.com/pl-pl/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx

cmd.CommandText = "SELECT Count(*) FROM users WHERE login_name = @Name AND password = @Password";
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@Name"].Value = 'admin';
cmd.Parameters.Add("@Password", SqlDbType.VarChar);
cmd.Parameters["@Password"].Value = '123';
if ((Int32)cmd.ExecuteScalar() > 0)
      label3.Text = "Awesome!"
else
      label3.Text = "Not found";
0

Poradziłem sobie sam :D Trochę pokombinowałem i wyszło. ;]

0

Przedstaw swoje rozwiązanie - może coś pomożemy, może coś Ty komuś pomożesz.

0
SqlConnection conn;
            SqlConnection sql = new SqlConnection();
            string sqlconn = "Data Source = servername; Initial Catalog = nazwabazy; User ID = nazwa_uzytkownika; Password = haslo";
            conn = new SqlConnection(sqlconn);
            string query = "Select username,password from dbo.LoginUsers(tak się nazywa moja tabela) Where username = '" + textBox1.Text.Trim() + "' and password = '" + textBox2.Text.Trim() + "';";


            try
            {
                SqlCommand cmd = new SqlCommand(query, sql);
                cmd.Connection = conn;
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    MessageBox.Show("Zostales Zalogowany.");
                    //tutaj otwieram nowe okno
                    this.Hide();
                    Main ss = new Main();
                    ss.Show();
                    // koniec otwierania nowego okna
                }
                else
                {
                    MessageBox.Show("Sprawdz Swoja Nazwe Uzytkownika Lub Haslo.");
                }
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Nie moge utworzyc polaczenia z baza danych.");
            }
0

Poczytaj o SQL injection ;-)

0

ze wszystkich możliwych wybrałeś najgorsze rozwiązanie. BTW powinieneś tam użyć using w paru miejscach

0
abrakadaber napisał(a):

ze wszystkich możliwych wybrałeś najgorsze rozwiązanie. BTW powinieneś tam użyć using w paru miejscach

Owszem wiem, że najgorsze ale jak na początek i tylko dla mnie to jest w porządku. Owszem będę próbował inne rozwiązania nie mówię nie. Patryk chciał żebym podał rozwiązanie to podałem :3

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