Software Development fundamentals ADO.NET
voorkennis ADO.NET = Verzameling classes in het .NET framework die we kunnen gebruiken voor databasetoegang
Verbinding sluiten / Using statement inhoudsopgave ADO.NET SqlConnection Connectionstring SqlCommand SqlDataReader Resultaat in een List<> Verbinding sluiten / Using statement
Wat gaan we doen (doel voor vandaag) Verbinding maken met een database Met SqlConnection Gegevens uitlezen Met SqlCommand en SqlDataReader een List maken Deze gegevens tonen op een form Met de ‘Gridview’ control
Wat gaan we nu doen Todo-applicatie samen ontwikkelen Database maken Form maken Database code schrijven Class maken Nog meer database code schrijven
Database maken We gaan een database maken voor een todo-applicatie. Hoe komt deze database eruit te zien?
SqlConnection Met SqlConnection maken we een verbinding met de database SqlConnection con = new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\mydb.mdf;Initial Catalog=mydb;Integrated Security=True;MultipleActiveResultSets=True");
Met SqlConnection maken we een verbinding met de database SqlConnection con = new SqlConnection(); Om een verbinding te maken heb je een ConnectionString nodig. Dat is één string die alle toegangsgegevens bevat. Voorbeeld connectionstring voor Sql Server Express 2014 LocalDB: Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\mydb.mdf;Integrated Security=True;
SqlConnection Je kunt de connectionstring meegeven aan de constructor: SqlConnection con = new SqlConnection(@"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\mydb.mdf;Integra ted Security=True;"); De @ gebruiken we om aan te geven dat we escape characters willen negeren (de \) Maar, waar kan je de juiste connectionstring vinden?
Hoe komen we eraan? Optie 1: Opzoeken op internet en aanpassen Optie 2: Dubbeklikken op het .mdf bestand om de database te openen. Dan bij de properties kijken naar de connectionstring, daar staat: Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="c:\users\eindbaas\documents\visual studio 2015\Projects\MyApplication\MyApplication\MyDatabase.mdf";Integrated Security=True Optie 3: In Visual Studio onder Data Sources > Add New Data Source > Next > Next > Connectionstring uitklappen. Daar staat: Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integr ated Security=True Dit kan je overnemen, en de wizard annuleren.
int result = cmd.ExecuteNonQuery(); SqlCommand SqlCommand cmd = new SqlCommand("SELECT * FROM product", con); Om vervolgens de query uit te voeren, kunnen we kiezen tussen: int result = cmd.ExecuteNonQuery(); Voert de query uit en returned het aantal ‘affected rows’; Handig voor Update, Delete, Insert SqlDataReader reader = cmd.ExecuteReader(); Voert de query uit en returned een DataReader om mee door de resultaten te lopen. Voor Select.
SqlCommand met datareader SqlConnection con = new SqlConnection(connectionstring); SqlCommand cmd = new SqlCommand("SELECT * FROM product", con); con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader["eenkolom"]); } con.Close(); Nu worden in de console onder elkaar alle waarden uit de kolom ‘eenkolom’ getoond. Je kunt deze while loop ook gebruiken om een lijst met objecten te vullen. Die lijst met objecten kan je dan in je console/form/webpagina tonen.
Omzetten naar een list We kunnen het resultaat van een SELECT query omzetten naar een List<> List<> is een uitgebreider alternatief voor een array. Hiervoor moeten we nog wel eerst een class maken.
public int Id { get; set; } public string Description { get; set; } Class maken Eerst maken we een class met properties die overeenkomt met de databasetabel public class Product { public int Id { get; set; } public string Description { get; set; } public double Price { get; set; } }
Lijst met objecten vullen En dan gebruiken we deze class om een List te maken List<Product> lijst = new List<Product>(); while (reader.Read()) { Product p = new Product(); p.Id = int.Parse(reader[“id”]); p.Description = reader[“description”].ToString(); p.Price = double.Parse(reader[“price”]); lijst.Add(p); } gridview1.DataSource = lijst;
close Klaar met je SqlConnection? Dan sluit je ‘m Voorbeeld van een delete query: SqlConnection con = new SqlConnection(connectionstring); con.Open(); SqlCommand cmd = new SqlCommand(“DELETE FROM product WHERE id = 1", con); int result = cmd.ExecuteNonQuery(); con.Close();
Using gebruiken als alternatief voor close() using (SqlConnection connection = new SqlConnection(connectionString)) { try connection.Open(); // doe iets met de connection, voer queries uit etc. } catch (Exception) // doe iets met de foutmelding } Het using statement zorgt ervoor dat de connection wordt gesloten en opgeruimd zodra je ermee klaar bent
Wat gaan we doen? Zelfstandig northwind applicatie ontwikkelen
Vragen Zijn er vragen?