reader.read() zonder while?

Status
Niet open voor verdere reacties.

Tomboman

Gebruiker
Lid geworden
15 feb 2013
Berichten
32
Ik heb het volgende stuk code:

Code:
using (MySqlCommand command = new MySqlCommand("SELECT * FROM gebruikers WHERE login='"+txtLoginNaam.Text.ToLower()+"'", connection))
                {
                    MySqlDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        if (reader.GetString("wachtwoord") != scrMd5(txtLoginPass.Text))
                        {
                            MessageBox.Show("Er is geen gebruiker met deze gebruikersnaam en wachtwoord.");
                        }
                    }

                }

Nu maak ik hier gebruik van een while, kan ik deze ook op één of ander manier weg werken, maar dat het nog wel goed werkt?
 
Je kunt zoiets doen:

[cpp]Lbl:
if (reader.GetString("wachtwoord") != scrMd5(txtLoginPass.Text))
{
MessageBox.Show("Er is geen gebruiker met deze gebruikersnaam en wachtwoord.");
}
if (Reader.Read()) goto Lbl;[/cpp]

Maar ik zie hier echt geen reden toe. Sowieso wordt het gebruik van goto afgeraden.
 
Ik gebruik meestal een class die mijn connections doet, zo is deze te gebruiken in meerdere projecten.

een stukje uit de class:
Code:
public DataSet GetDataSet(string sqlQuery)
{
	return GetDataSet(sqlQuery, new List<SqlParameter>());
}
public DataSet GetDataSet(string sqlQuery, List<SqlParameter> parameters)
{
	var ds = new DataSet();

	using (var connection = new SqlConnection(ConnectionString))
	{
		using (var command = new SqlCommand(sqlQuery, connection))
		{
			if (parameters != null)
			{
				foreach (var param in parameters)
					command.Parameters.Add(param);
			}

			using (var dataAdapter = new SqlDataAdapter(command))
			{
				connection.Open();
				dataAdapter.Fill(ds);
			}
		}
	}

	return ds;
}

Je krijgt dus een dataset terug na je select query. Hier kun je dan bijvoorbeel ds.Tables[0].Rows.Count gebruiken om te kijken of er 0 rows terug zijn gekomen.
Als er wel een row is kun je de gegevens eruit halen en gebruiken hoe je wilt.

(ik doe dit in een repository class die bijvoorbeeld 'Accounts' (account class) opvraagt in plaats van zo maar een string met een naam of wat dan ook, ik try/catch dus ook daar en niet hier)


(dit is voor MSSQL maar als je overal waar Sql staat MySql van maakt zou het wel moeten werken, ze hebben denk ik allemaal dezelfde class/method namen)
 
Ik raad het gebruik van een Object Relation Mapper (ORM) aan zodat je op een object georiënteerde manier tegen je database aan kunt praten. Handmatig query'en tegen je database is een beetje uit de tijd..

De 2 meest gebruikte ORM's in .NET zijn:

- EntityFramework
- NHibernate

Voor beide ORM's zijn genoeg tutorials te vinden.

Het voorbeeld dat je gaf, zal er bij gebruik van een ORM, ongeveer als volgt uitzien:

[CPP]
User user = Context.Users.FirstOrDefault(u => u.Login == <username> && u.Password == <password>);
if(user == null){
//Error
}
[/CPP]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan