DAL SelectOne methode
De SelectOne methode haalt 1 rij op uit de onderliggende tabel.
Probleem
We moeten één rij uit een SQL tabel kunnen omzetten naar een gegevenstype dat door C# begrepen en gemanipuleerd kan worden.
Design
We zetten één rij van de tabel om in een object van het type OrderStatus
model. We moeten er rekening mee houden dat een kolom in SQL de waarde NULL kan hebben. Om geen foutemelding in C# te krijgen moeten we die mogelijkheid onderscheppen door eerst te testen als de kolom geen NULL waarde heeft. Dat doen we met de IsDbNull
methode. De GetOrdinal
methode retourneert het volgnummer van de kolom in de tabel en dus ook in de datadictionary die door de datareader geretourneerd wordt.
Oplossing
public Models.OrderStatus ReadOne() { SqlConnection connection = new SqlConnection(); connection.ConnectionString = ConfigurationManager. ConnectionStrings["WebwinkelWindowsAuthentication"].ToString(); SqlCommand command = new SqlCommand(); // in de CommandText eigenschap stoppen we de naam // van de stored procedure string sqlString = "OrderStatusSelectOne"; //we use here a getter method to obtain the value to be saved, command.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int)).Value = Model.Id; // zeg aan het command object dat het een stored procedure // zal krijgen en geen SQL Statement command.CommandType = CommandType.StoredProcedure; // stop het sql statement in het command object command.CommandText = sqlString; // geeft het connection object door aan het command object command.Connection = connection; this.message = "Niets te melden"; // we gaan ervan uit dat het mislukt SqlDataReader result = null; using (connection) { try { connection.Open(); //Verbinding geslaagd this.message = "Connectie is open"; using (result = command.ExecuteReader()) { if (result.HasRows) { // lees de gevonden rij in this.message = " OrderStatus is gevonden."; result.Read(); Model.Name = (result.IsDBNull(result.GetOrdinal("Name")) ? "" : result.GetString(result.GetOrdinal("Name"))); Model.Description = (result.IsDBNull(result.GetOrdinal("Description")) ? "" : result.GetString(result.GetOrdinal("Description"))); Model.Id = (result.IsDBNull(result.GetOrdinal("Id")) ? 0 : result.GetInt32(result.GetOrdinal("Id"))); } else { this.message = " OrderStatus rij niet gevonden."; } } } catch (SqlException e) { this.message = e.Message; } } return Model; }
2017-01-21 16:26:01