C# i SQL Formularz logowania

0

Witam. Staram się napisać prosty program do rejestracji i logowania użytkownika w oparciu o c# i SQL Server Ce.

Kod rejestrujący użytkownika w bazie wygląda tak:

SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\...\database.sdf");
                string cmdIndywidualny = "INSERT INTO Uzytkownicy(login, haslo) VALUES('"+ this.textBox1.Text + "','" + this.textBox2.Text+ "')";
                SqlCeCommand cmd = new SqlCeCommand(cmdIndywidualny, con);
                con.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Dane wprowadzone");
                con.Close();
 

Problem mam przy formularzu logowania.. nie wiem jak się do tego zabrać.
Chciałbym, żeby wartości wpisane w formularzu w textboxach login, hasło, były porównywane z tymi znajdującymi się w bazie.
Czy mógłby ktoś wskazać rozwiązanie, lub jakiś tok myślenia.

Jeśli to by było za wiele, to czy ktoś mógłby podać kod który wyświetli w labelu dane z konkretnej komórki. (SELECT Haslo FROM Uzytkownicy WHERE Login=admin)

0

Zapytujesz bazę o rekordy te które pasują do loginu i hasła, jeżeli baza coś zwróci to znaczy, że się zgadzają i można zalogować.

"SELECT * FROM Users WHERE Login='" + login + "' AND Password='" + password + "'"
0

Proponowałbym może coś takiego. Odczytać wszystkie dane jakie są w określonej tabelce

"SELECT `login` FROM `Konta`"

, następnie funkcja do czytania tego o co zapytałeś serwer MySqlDataReader reader = cmd.ExecuteReader();

 i odczytać można takim sposobem
```csharp
while (reader.Read())
{
jeśli (twój nick wpisany w textbox == wyczytanemu z bazy czyli reader[0].ToString())
{
wiadomość(taki login istnieje)
}

To jest sposób jak można odczytać czy w twojej bazie, w określonej tabelce znajduje się tekst szukany przez ciebie. Jeśli to jest źle to proszę o poprawkę

0

Dziękuję za porady.
Rozwiązałem to w sposób, który zasugerował xeo545x39.

  SqlCeConnection conn = null;
            SqlCeCommand cmd = null;
            SqlCeDataReader rdr = null;

            conn = new SqlCeConnection(@"Data Source=C:\Users\...\database.sdf");
            conn.Open();
            cmd = new SqlCeCommand("SELECT * FROM Uzytkownicy WHERE Login='"+login+"' AND Haslo='"+haslo+"'", conn);
           
            rdr = cmd.ExecuteResultSet(ResultSetOptions.Scrollable);

            if (rdr.HasRows == true)
            { MessageBox.Show("Logowanie udane"); }
            else
            { MessageBox.Show("Logowanie nieudane"); }
            con.Close();

Jeśli ktoś ma do zaproponowania inną metodę to zachęcam.

1
  1. Czy select * jest potrzebne ? nie lepiej select id ? Domyślam się, że kiedyś będziesz potrzebował właśnie tego identyfikatora użytkownika. Ale czy inne dane ? Jeśli tak to ok ;)
  2. Spróbuj w polu login wpisać ' or 1=1 --, zaś hasło podaj dowolne - zalogował ? :D To jest tylko logowanie... tym sposobem łatwo wywalić wszystkie dane z tabel (o ile użytkownika ma prawo do updatów bądź deletów na tabeli, ale domyślam się, że ma :) )
    3 Lekcja na dziś http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx (w SqLite będzie podobnie) - pozwoli uchronić przed wieloma problemami, dodatkowo troszkę przyspieszy wykonywanie zapytania (jeden plan zapytania dla pobierania danych dla wszystkich użytkowników)
0

Jak napisał @jonathan1500 - poczytaj o SQL Injection.

0

Witajcie,
mam problem z logowaniem do bazy danych w C#.

Kod źródłowy:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace WindowsApplication3
{
    public partial class Form12 : Form
    {
        public Form12()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();
            con.ConnectionString = "Data Source=ANIA-HP;Initial Catalog=praca;Integrated Security=True";
            con.Open();
           
            string txtUser = textBox1.Text;
            string txtPasswd = maskedTextBox1.Text;
            string query = "SELECT * FROM Logowanie WHERE User=@user AND Passwd=@passwd";
            SqlCommand cmd = new SqlCommand(query, con);
           
         
            cmd.Parameters.AddWithValue("@user", txtUser);
            cmd.Parameters.AddWithValue("@passwd", txtPasswd);
           
            SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows == true)
                {

                    MessageBox.Show("Zalogowano poprawnie");
                }

                else
                {
                    MessageBox.Show("Błąd logowania");
                }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

      

        }
    }

Przy wprowadzeniu poprawnych danych do zalogowania wyskakuje okienko "Błąd logowania".

z góry dziękuję za pomoc.

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