Kezdőoldal » Számítástechnika » Programozás » Miért csak az első sort olvassa?

Miért csak az első sort olvassa?

Figyelt kérdés

Hello csináltam egy mysql login programot visual studio 2017-ben de a database első sorát olvassa csak el! és a többi is kéne nekem amikor a második sorba lévő datát írom be akkor ezt írja : "rosszak az adatok!".


A KÉRDÉS: MIÉRT CSAK AZ ELSŐ SORT OLVASSA?


ITT A KÓD:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using MySql.Data.MySqlClient;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;


namespace LoginappApp

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}


string megvette;

string username;

string password;

int id;


string usernameTXT;

string passwordTXT;


private void buttonconn_Click(object sender, EventArgs e)

{

usernameTXT = textBox3.Text;

passwordTXT = textBox4.Text;


if (usernameTXT == username && passwordTXT == password)

{

if (megvette == "true" || megvette == "root")

{

MessageBox.Show("ön sikeresen login-olt és megvette!");

}

else { MessageBox.Show("ön nem vette meg a játékot!"); }



} else {

MessageBox.Show("rosszak az adatok!");


}//end if/else


}//end buttonclick


private void Form1_Load(object sender, EventArgs e)

{

string connString = "Server=localhost;Database=jatekosok;User ID=root;";


MySqlConnection conn = new MySqlConnection(connString);


conn.Open();


MySqlCommand command = conn.CreateCommand();

command.CommandText = "SELECT ID, Username, Password, Megvette FROM lista WHERE 1";


IDataReader reader = command.ExecuteReader();


if (reader.Read())

{


id = (int)reader["ID"];

username = (string)reader["Username"];

password = (string)reader["Password"];

megvette = (string)reader["Megvette"];


}

reader.Close();

command.Dispose();

conn.Close();


}//end Form1.Load



}//end class



}//end app



2017. júl. 26. 16:26
 1/10 anonim ***** válasza:
100%

"if (reader.Read()) "


while(reader.Read()) lesz az :)

2017. júl. 26. 16:52
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
100%
Ja és a DB kapcsolathoz ajánlom figyelmedbe a using utasítást. Úgy nem kellene külön az erőforrás-felszabadítással foglalkoznod.
2017. júl. 26. 16:53
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:
31%
A moslék kód mindenit...
2017. júl. 26. 17:13
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:
Mysql-hez is van entity framework, használd azt, ne ilyen elavult múltszázadi cucokkal szenvedj, mint sqlcommand meg hasonlók.
2017. júl. 26. 19:19
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
Ember ezt egy teszt mert unity 5-be mysql login kéne!
2017. júl. 26. 21:18
 6/10 A kérdező kommentje:
AKI 16:52-KOR ÍRT (ASSZEM 1/5) NEKI KÖSZÖNÖM!
2017. júl. 26. 21:21
 7/10 A kérdező kommentje:

while(reader.Read())


így meg csak az utolsót olvassa! :) :(

2017. júl. 26. 21:29
 8/10 anonim ***** válasza:
Hogyne.
2017. júl. 26. 21:32
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:

Szia,

láttam, hogy pm-ben is megköszönted :) hány rekordból áll a tábla?


Mert az SQL lékérdezésed egy sima projekció, minden rekordnak meg kellene jelennie az eredménytáblában (amit a reader objektumod Read() metódusával jársz be).

Elméletileg helyes a SQL lekérdezésed, de ha a " ID, Username, Password, Megvette " a táblád összes oszlopa, akkor egyszerűsítsd így:


SELECT * FROM lista


(teljesen felesleges a "WHERE 1", bár nem rontottál el vele semmit)


Namármost ezután kapsz egy eredménytáblát, amit a Read() metódussal jársz végig. Te annyit csinálsz a while ciklusban, hogy mindig az aktuális rekordod adatait adod értékül az id, username, ... változóknak, és mivel ez egy ciklus az id, username, ... változók értéke mindig felülíródik az aktuális rekord adataival. Mivel az "utolsó aktuális" rekord az utolsó sor/rekord lesz (hiszen mivel nincs több sor a Read() false-al tér vissza -> ciklus vége), így persze, hogy az utolsó sor adatait tárolják a változóid. Ez a hiba.

2017. júl. 27. 10:56
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

(folytatom a #9-et)

Tehát végigolvas minden sort. Ezt magad is láthatod, ha bedobsz a ciklusba +1 utasítást, ami kiírja konzolra, hogy mik a változóid aktuális értékei.


wile(reader.Read())

{


id = (int)reader["ID"];

username = (string)reader["Username"];

password = (string)reader["Password"];

megvette = (string)reader["Megvette"];


Console.WriteLine("ID:{0}, User:{1}, Password:{2}, Megvette:{3}.", id, username, password, megvette);

}


Remélem, segítettem.

2017. júl. 27. 11:05
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!