Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 08:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Daten aus MySQL Datenbank auslesen

Discussion on Daten aus MySQL Datenbank auslesen within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 24
Join Date: Apr 2010
Posts: 35,931
Received Thanks: 6,344
Daten aus MySQL Datenbank auslesen

Hallo ihr Coder,

ich versuche derzeit ein simples Login System zu coden.
Hier erstmal der Code:
Code:
private void button1_Click(object sender, EventArgs e)
        {
            string conn = "Server=localhost;Port=3306;Database=users;Uid=root;password=;";
            MySqlConnection connection = new MySqlConnection(conn);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "select * from usertable";
            connection.Open();
            MySqlDataReader Reader = command.ExecuteReader();
            while (Reader.Read())
            {
            //reader soll lesen und daten aus textboxen mit der datenbank vergleichen
            }
        }
Nun muss der Reader auslesen und Daten aus Textboxen mit der Datenbank vergleichen.
Da weiß ich nicht mehr weiter ;<

#edit
Eventuell hilft es jemanden von euch mal in Problemen.
Ich hab mal ein wenig Brainstorming gemacht und bin auf die Lösung gekommen
Code:
private void button1_Click(object sender, EventArgs e)
        {
            string conn = "Server=localhost;Port=3306;Database=users;Uid=root;password=;";
            MySqlConnection connection = new MySqlConnection(conn);
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = "select * from usertable";
            connection.Open();
            MySqlDataReader Reader = command.ExecuteReader();
            while (Reader.Read())
            {
                String login = Reader["username"].ToString();
                String pass = Reader["password"].ToString();
                if (textBox1.Text.Equals(login) && textBox2.Text.Equals(pass))
                {
                    Form2 Form = new Form2();
                    Form.Show();
                    this.Hide();
                }
                else
                {
                    MessageBox.Show("Incorrect username or password!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

    }
Es gibt da aber noch was auszubessern!
Ihr solltet wenn ihr das verwendet, die Verbindung zur Datenbank über einen anderen Button herstellen, denn sonst gibts die MessageBox auch beim erfolgreichen login.


Grüße,Drewfire
anonymous-f4h279 is offline  
Old 10/12/2012, 09:21   #2
 
elite*gold: 0
Join Date: Nov 2005
Posts: 40
Received Thanks: 8
Guten Morgen,

du solltest lieber das Query von vorne rein so anpassen, dass im result nur der benutzer steht, der sich auch einloggen will. Also:

Code:
command.CommandText = "select * from usertable WHERE username = " + login;
Wenn du mehr mitglieder hast muss er sonst im schlechtesten Fall alle usernamen abgleichen.

Zudem rate ich dir, das passwort als hash in der Datenbank zu speichern und folglich dann auch nur die hashes zu vergleichen. Sollte mal jemand zugriff zu deiner Datenbank erhalten hat der Angreifer dann wenigstens keine Passwörter im Klartext.

Gruß
fatalaty is offline  
Thanks
2 Users
Old 10/12/2012, 15:22   #3
 
elite*gold: 24
Join Date: Apr 2010
Posts: 35,931
Received Thanks: 6,344
Danke, wie schreibe(insert) ich in die Datenbank hinein? Das wäre dann fürs registrieren.
anonymous-f4h279 is offline  
Old 10/12/2012, 15:34   #4
 
elite*gold: 0
Join Date: Nov 2005
Posts: 40
Received Thanks: 8
Quote:
Originally Posted by Drewfire View Post
Danke, wie schreibe(insert) ich in die Datenbank hinein? Das wäre dann fürs registrieren.
Im allgemeinen oder den Hash?
fatalaty is offline  
Old 10/12/2012, 15:59   #5
 
elite*gold: 24
Join Date: Apr 2010
Posts: 35,931
Received Thanks: 6,344
Im allgemeinen erstmal als Text.
Es gibt die Tabelle usertable und 3 Spalten darin.
ID(primary key),username,password.

ID als Integer und die andren als Text.
anonymous-f4h279 is offline  
Old 10/12/2012, 19:59   #6


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
Dazu kann ich dir diese Seite ans Herz legen:

Wenn du genauere Hilfe zu 'ner Queryerstellung mit Textboxen etc. brauchst, melde dich einfach bei mir, schaue leider nicht dauerhaft in die Threads hier, Skype wäre auch okay.

//edit:

Das wäre dann dein Query, wenn es aus Textboxen ausgelesen wird:

Code:
string conn = "Server=localhost;Port=3306;Database=users;Uid=root;password=;";
    MySqlConnection myConnection = new MySqlConnection(conn);
    string myInsertQuery = "INSERT INTO usertable (username, password) 
                            Values('" + textBoxUSER + "', '" + textBoxPW + "')";
    MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
    myCommand.Connection = myConnection;
    myConnection.Open();
    myCommand.ExecuteNonQuery();
    myCommand.Connection.Close();
#SoNiice is offline  
Old 10/14/2012, 05:05   #7
 
elite*gold: 24
Join Date: Apr 2010
Posts: 35,931
Received Thanks: 6,344
Ein Danke an Walter, der mich darauf hingewiesen hat, dass ich Auto Increment für die ID Spalte festlegen muss
anonymous-f4h279 is offline  
Old 10/15/2012, 12:51   #8


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
Allgemein solltest du dein Projekt nicht so aufbauen, dass deine SQL Connection direkt in dem OnClick Event steht.

Ein möglicher aufbau ist:
Datalayer<-->Repository<-->Entities

Der Datalayer bastelt dir das Query zusammen und ballert es auf die Datenbank:


Beispielmethode
Code:
var sqlParameters = new SqlParameter[] {
                new SqlParameter( "@id", SqlDbType.Int ) {
                    Value = id
                }
            };
            const string selectQuery = "SELECT * FROM tblXXXXX WHERE id = @id";
            var connection = CreateSqlConnection();

            var command = CreateCommand(selectQuery, connection, sqlParameters);


            var reader = command.ExecuteReader();
            TaetigkeitEntity result = null;
            if (reader.Read())
            {
                result = MapXXXXX(reader);
            }
            connection.Close();
            return result;
CreateCommand
Code:
 private static SqlCommand CreateCommand(string query, SqlConnection connection, SqlParameter[] sqlParameters = null)
        {
            var command = connection.CreateCommand();
            command.Connection = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = query;
            if ( sqlParameters != null ) {
                command.Parameters.AddRange(sqlParameters);
            }
            return command;
        }
CreateSQLConnection

Code:
private static SqlConnection CreateSqlConnection()
        {
            var connectionInfo = ConfigurationManager.ConnectionStrings["TheOnlyOneConnection"]; //sollte in der App.config gespeichert sein
            var connection = new SqlConnection(connectionInfo.ConnectionString);
            connection.Open();
            return connection;
        }
MAP Methode
Code:
private XXXXXEntity MapPerson(SqlDataReader reader)
        {
            var personEntity = new PersonEntity
                             {
                                 Vorname = reader["vorname"].ToString(),
                                 Nachname = reader["nachname"].ToString(),
                                 Ausbildungsstart = (DateTime) reader["ausbildungsstart"],
                                 PasswordHash = reader["md5passwort"].ToString(),
                                 Nummer = (int) reader["id"]
                             };
            return personEntity;
        }




Im Repository steht dann nurnoch:

Code:
public XXXXXEntity Get(string nachname)
        {
            var result = _datalayer.GetPerson(nachname);
            return result;
        }

Und das XXXXXEnitity hat eben die Properties die du haben willst:

Code:
public class XXXXXEntity
    {
        public string Vorname { get; set; }
        public string Nachname { get; set; }
        public int Nummer { get; set; }
        public DateTime Ausbildungsstart { get; set; }
        public string PasswordHash { get; set; }
    }


Im Code kannst du dann in deinem OnClick Event so auf die Properties zugreifen:

Code:
_XXXXXRepository.Get(stringNachname).Nachname/Vorname/Nummer/usw
Genauso kann du eben auch Updaten / Create / Insert ausführen.

Der Vorteil?
Du musst nicht bei jedem Event den ganzen Code reinhacken, du kannst einfach im Datalayer die Quelle ändern (natürlich kannst XML, andere DB, INI), ...
Lawliet is offline  
Thanks
1 User
Old 10/15/2012, 17:18   #9
 
elite*gold: 0
Join Date: Oct 2012
Posts: 172
Received Thanks: 201
Ich würde erstmal deine mysql daten aus dem programm code nehmen.
Einmal decompilen und jeder hat zugriff auf deine DB.
CryLike is offline  
Old 10/16/2012, 03:24   #10
 
elite*gold: 24
Join Date: Apr 2010
Posts: 35,931
Received Thanks: 6,344
Weil da auch so viel drauf ist und hier meine IP steht
Es sollte nun langsam jeder geblickt haben, dass es nur zum üben ne lokale DB ohne nix ist.
anonymous-f4h279 is offline  
Old 10/16/2012, 21:03   #11
 
kissein's Avatar
 
elite*gold: 0
Join Date: Sep 2005
Posts: 426
Received Thanks: 87
Kleine Anmerkung zum #edit vom OP

Es ist "ok" die Mysql Verbindung nicht zu beenden, wenn es nicht:
-zuviele idle connections gibt und dadurch das mysql connection limit erreicht wird.

-idle verbindung gibt die über Stunden nichts tut, da dass Mysql Timeoutlimit bei 8 Stunden liegt. Benutzt man aber die Connection danach erneut, erhält man “MySQL server has gone away”...
kissein is offline  
Old 10/17/2012, 10:59   #12


 
elite*gold: 0
Join Date: Feb 2010
Posts: 7,221
Received Thanks: 6,758
Drew, ich glaube es wurde eher gemeint, dass du allgemein die MySQL Daten nicht im Programm haben sollst.
#SoNiice is offline  
Reply


Similar Threads Similar Threads
mit php in mysql höchste id auslesen
04/13/2012 - Web Development - 9 Replies
Hallo ich habe ein kleines Problem undzwar habe ich mir in pbp so ne art gästebuch gecodet, dieser code soll die größte id aus der spalte id ausgeben und +1 nehmen d.h die höchste id ist z.b 15 und dann +1 also 16. $abfrage = "SELECT id FROM gästebuch ORDER BY id DESC LIMIT 0,1"; $result = mysql_query($abfrage); $id2 = mysql_result($result,0,0); $endid = $id2 + "1"; nunja wenn ich aber in dem gästebuch mehr als 10 einträge habe wird die id immer 10 haben und nicht +1 gezählt könnte...
datenbank mit clienten auslesen?
10/11/2011 - Metin2 Private Server - 0 Replies
hallo gibt es eine möglichkeit mit dem clienten die datenbank auszulesen. zB mit dem boniswitcher von realfreak die item_atr auslesen und dann in der boniliste anzeigen? mfg
[Q] [VB.NET] Daten auslesen
09/03/2011 - .NET Languages - 3 Replies
Hey Com, ich hab mal ne frage unzwar will ich ein Bot Programmieren der Hidden laufen soll (Nein ich bin nicht einer dieser Trottel die toll sein wollen und von 0 auf 100 starten wollen) Ich habe bereits einiges gelernt aber mit fehlt einfach ein Grundcode Ich möchte in einem Spiel: "METIN2" BEstimmte Sachen auslesen wie
Datenbank über Auslesen von logs erstellen
09/06/2010 - General Coding - 3 Replies
hallo, ich möchte eine kleine datenbank in excel erstellen. ich hab viele logsvieles (.txt) die so aussehen. geht zwar nicht um einen bot, aber vielleicht kann mir ja trotzdem jemand helfen. ;) überschrift 1 daten überschrift 2 daten. überschrift1
Daten Auslesen
04/11/2007 - World of Warcraft - 7 Replies
hi, ich hab mal neh frage da ich zurzeit mit dem gedanken liebäugel mein acc zu verkaufen wolt ich fragen ob es neh möglichkeit gibt mein charakter voll auslesen zu lassen (like buffed) allerdings den namen zu faken damit blizzard mir bei auktionen net an die eier gehen oO" wichtig ist halt sachen wie bank, rezepte, equip etc am besten währe etwas was ich auf eigenen webspace laufen lassen kann ich hoff ihr versteht was ich meine und könnt mir was empfehlen ^^



All times are GMT +2. The time now is 08:27.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.