Pobranie wartości z kolumny z zapytania SQL

0

Witam,

Szukam już sporo na internecie o tym i kilka prób kończy się zawsze klęską. Sql wyszukuje użytkownika i hasło czy takie owo istnieje. Jeśli znajdzie to chciałbym aby odczytał dane z 3 kolumny (Czy jest to administrator) oraz z 4 kolumny (Co to jest za sklep). Używam datarow, ale za każdym razem funkcja try nie może się ukończyć pozytywnie. Kod bez fukncji datarow działa poprawnie i bez problemu można się zalogować do programu. Proszę o pomoc i o to mój kod:

try
            {
                ConnectSQL.Open();
                string query = "SELECT * FROM Login WHERE Login = '" + LoginText + "' AND Hasło = '" + PasswordText + "';";
                try
                {
                    MySqlCommand cmd = new MySqlCommand(query,ConnectSQL);
                    MySqlDataReader reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        DataTable dt = new DataTable();
                        MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
                        dt.Load(reader);
                        DataRow dw = dt.Rows[0];
                        var MainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
                        MainWin.NazwaLogin.Text = "Jako: " + LoginText;
                        MainWin.SetUser(dw[2].ToString(),dw[3].ToString());
                        ConnectSQL.Close();
                        FormLogin.Close();
                    }
                    else
                    {
                        MessageBox.Show("Nie prawidłowe hasło lub login!", "Nie prawidłowe dane");
                    }
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Nie prawidłowe hasło lub login!", "Nie prawidłowe dane");
                }
0

Co zwraca wyjątek

catch(Exception ex)
{
    var error = ex.Message; // co tutaj masz?
    MessageBox.Show("Nie prawidłowe hasło lub login!", "Nie prawidłowe dane");
}
0
AdamWox napisał(a):

Co zwraca wyjątek

catch(Exception ex)
{
    var error = ex.Message; // co tutaj masz?
    MessageBox.Show("Nie prawidłowe hasło lub login!", "Nie prawidłowe dane");
}

Tego vara nie mam. W sensie nic nie zwraca jak takie coś wprowadzę. Wyjątek zwraca komunikat, że nie prawidłowe hasło i login chociaż wpisuje takie jak w bazie danych. Nie wiem czy dobrze się zrozumieliśmy :) Przepraszam za kolejną edycje, ale wrzucenie vara do massege boxa powoduje zapis : Brak wiersza w pozycji 0. Teraz nie wiem już czy do końca dobrze zrozumiałem miechanike DataRow.

0

Nie masz żadnych wierszy w DataTable, ponieważ dt.Rows[0] zwraca ci wyjątek. Dodaj jeszcze jednego ifa

if(dt.Rows.Count > 0)
{
    DataRow dw = dt.Rows[0];
}
else
{
    MessageBox.Show("Nieprawidłowe hasło lub login!", "Nieprawidłowe dane"); 
}
0
AdamWox napisał(a):

Nie masz żadnych wierszy w DataTable, ponieważ dt.Rows[0] zwraca ci wyjątek. Dodaj jeszcze jednego ifa

if(dt.Rows.Count > 0)
{
    DataRow dw = dt.Rows[0];
}
else
{
    MessageBox.Show("Nieprawidłowe hasło lub login!", "Nieprawidłowe dane"); 
}

Wiadomo, że to zadziała, ale przecież mam wiersz jeden bo udało się zalogować. Jakby nie znalazło wierszy to znaczy, że nie ma takiego loginu lub hasła.

0

Ty mówisz co innego, a co innego mówi twój kod. Jeśli błędem sypie na linii, w której masz dt.Rows[0] to znaczy, że nie masz wierszy. Gdzie się udało zalogować? Pokazujesz kawałek kodu, z którego nic nie wynika oprócz wyjątku, o którym piszesz.

Przerób sobie pod MySQL:

string ConnectionString = "";
            DataTable dt = new DataTable();

            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                con.Open();
                using (SqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = "select * from Login where Login = @Login and Hasło = @Password";
                    cmd.Parameters.AddWithValue("@Login", "[email protected]");
                    cmd.Parameters.AddWithValue("@Password", "1234567");

                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                }
            }

PS.
Widać, że to twoje początki. Spróbuj się zaznajomić z jakimś ORMem np.: Dapper albo EntityFramework. Wszelkiego rodzaju DataTable i robienie tego "ręcznie" odchodzi i mam nadzieje, że nie wróci. Najważniejsze pytanie - dlaczego akurat MySQL?

0

Szczerze. nie wiedziałem, że istnieją jakieś inne metody jak nie łączenie c# z MySql. Sprawdzę te frameworki. Stąd wiem bo zamyka mi okno logowania oraz po lewej w programie mam zapisane kto się zalogował oraz wpisanie złego hasła lub loginu powoduje wyskoczenia komunikatu o złym haśle.

0

Pomieszałeś też wszystko i stąd pewnie masz błędy. Jeśli używasz MySqlDataReader to nie potrzebny ci MySqlDataAdapter i odwrotnie. Albo jedno, albo drugie. Teoretycznie robisz to samo dwa razy.

0

Po usunięciu adapter i tego if'a z readerem coś ruszyło, a mianowicie zaczął widzieć wiersze.Dziękuje bardzo za pomoc, tak jak mówiłeś trochę pomieszałem w kodzie i nie potrzebnie 2 razy użyłem tej samej funkcji. Kod w sumie sklejałem z kilku stron i o ile znam biblioteki z Unity to z sqelem dopiero się uczę i jest wszystko na odwrót. Chciałem się też nauczyć sql z c# bo myślałem, że napisanie i znajomość tego połączenia pomoże w szukaniu pracy. Nie wiem jak ty to widzisz, ale lepiej jak zacznę pisać programy w tych Dapper albo EntityFramework ?

0

Wydaje mi się, że czasy "ręcznego" operowania na danych się skończyły. Jeśli chodzi o pracę to zdecydowanie ORM ci się przyda.

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