Miért csak az első sort olvassa?
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
"if (reader.Read()) "
while(reader.Read()) lesz az :)
while(reader.Read())
így meg csak az utolsót olvassa! :) :(
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.
(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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!