Καθαξόληδαο Γηώξγνο Τι θα δούμε σε αυτό το μάθημα; Αλάθηεζε δεδνκέλωλ από ηνλ Microsoft SQL Server κε ηελ ρξήζε ηνπ ADO.NET θαη ζρεηηθέο θιάζεηο. SqlConnection θαη SqlConnectionStringBuilder SqlCommand θαη SqlParameter SqlDataReader SqlException Έλα παξάδεηγκα κε ηηο πξναλαθεξζείζεο θιάζεηο. Πξόθιεζε εμαηξέζεωλ από null ηηκέο ζηελ ΒΓ θαη αληηκεηώπηζε ηωλ πξνβιεκάηωλ. Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Επικοινωνία με ΒΔ χρησιμοποιώντας το ADO.NET Τν ADO.NET είλαη κία βηβιηνζήθε θιάζεωλ γηα ηελ δεκηνπξγία εθαξκνγώλ πνπ αλαθηνύλ θαη ελεκεξώλνπλ βάζεηο δεδνκέλωλ από εθαξκνγέο ηνπ .NET. Κάζε επηθνηλωλία ηνπ πξνγξάκκαηνο κε ηελ ΒΓ γίλεηαη κέζω παξνρέωλ δεδνκέλωλ (data providers). Κάζε Σύζηεκα Γηαρείξηζεο Βάζεωλ Γεδνκέλωλ (π.ρ. SQL Server, Oracle θιπ.) έρεη ηνπο δηθνύο ηνπ παξνρείο δεδνκέλωλ. Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 ΒΔ παραδείγματος: Northwind Traders Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #1: Ανάκτηση παραγγελιών πελάτη Οη θιάζεηο πνπ ζα ρξεζηκνπνηήζνπκε βξίζθνληαη ζην namespace System.Data.SqlClient. Τν System.Data.SqlClient namespace πεξηέρεη ηηο θιάζεηο παξνρήο δεδνκέλωλ γηα ηνλ SQL Server. Απηέο νη θιάζεηο είλαη εμεηδηθεπκέλεο εθδόζεηο ηωλ γεληθόηεξωλ θιάζεωλ ηνπ ADO.NET εηδηθά γηα ηελ αιιειεπίδξαζε κε ηνλ SQL Server. Γεκηνπξγνύκε έλα project θνλζόιαο κε ην όλνκα ReportOrders. Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #2: Δημιουργία σύνδεσης με την Βάση Δεδομένων Η θιάζε SqlConnection είλαη κία παξάγωγε θιάζε κίαο θιάζεο ηνπ ADO.NET πνπ νλνκάδεηαη Connection. Δίλαη ζρεδηαζκέλε γηα λα ρεηξίδεηαη ζπλδέζεηο κε βάζεηο δεδνκέλωλ ηνπ SQL Server. Σηελ κέζνδν Main δειώλνπκε ηελ ζύλδεζε: static void Main(string[] args) { SqlConnection dataConnection = new SqlConnection(); } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #3: Χειρισμός εξαιρέσεων Η αιιειεπίδξαζε κε ηελ ΒΓ ελδέρεηαη λα πξνθαιέζεη εμαηξέζεηο. Τππηθά ελζπιαθώλνπκε ηνλ θώδηθα πξόζβαζεο ζηελ ΒΓ ζε έλα try-catch block. static void Main(string[] args) { ... try { // Δδώ ζα βάινπκε ηηο εληνιέο πξόζβαζεο ζηελ Βάζε Γεδνκέλωλ } catch (SqlException e) { Console.WriteLine("Λάζνο πξόζβαζεο ζηελ Βάζε Γεδνκέλωλ: {0}", e.Message); } } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #4: Πληροφορίες σύνδεσης Γηα λα ζπλδεζνύκε κε ηελ ΒΓ δίλνπκε πιεξνθνξίεο ζρεηηθέο κε ην πνπ είλαη ε ΒΓ, πωο νλνκάδεηαη θαη ηνλ ηξόπν πηζηνπνίεζεο (αζθάιεηα). Σηελ ζπλέρεηα αλνίγνπκε ηελ ζύλδεζε θαιώληαο ηελ εληνιή Open ζην SqlConnection αληηθείκελν: try { SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = ".\\SQLExpress"; builder.InitialCatalog = "Northwind"; builder.IntegratedSecurity = true; dataConnection.ConnectionString = builder.ConnectionString; dataConnection.Open(); } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #5: Σχηματισμός ερωτήματος Σρεκαηίδνπκε ην εξώηεκα πξνο ηελ ΒΓ: try { … Console.Write( “Γώζε ηνλ θωδηθό πειάηε (5 ραξαθηήξεο): "); string customerId = Console.ReadLine(); SqlCommand dataCommand = new SqlCommand(); dataCommand.Connection = dataConnection; dataCommand.CommandType = CommandType.Text; dataCommand.CommandText = "SELECT OrderID, OrderDate, ShippedDate, ShipName, ShipAddress, " + "ShipCity, ShipCountry " + "FROM Orders WHERE CustomerID = @CustomerIdParam"; } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #6: Προσδιορισμός παραμέτρων ερωτήματος Γεκηνπξγνύκε ηηο SqlParemeter γηα ην εξώηεκα θαη ηηο πξνζζέηνπκε ζηελ εληνιή: try { … SqlParameter param = new SqlParameter("@CustomerIdParam", SqlDbType.Char, 5); param.Value = customerId; dataCommand.Parameters.Add(param); } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #7: Αποτέλεσμα ερωτήματος. Η κλάση SqlDataReader Δθηεινύκε ην εξώηεκα. Τν απνηέιεζκα είλαη έλαο SqlDataReader. Η θιάζε SqlDataReader παξέρεη ηνλ ηαρύηεξν κεραληζκό αλάθηεζεο δεδνκέλωλ από κία ΒΓ ηνπ SQL Server: try { … Console.WriteLine(«Αλάθηεζε παξαγγειηώλ πειάηε {0}\n\n", customerId); SqlDataReader dataReader = dataCommand.ExecuteReader(); } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #8: Ανάκτηση γραμμών (εγγραφών) από τον SqlDataReader Η κέζνδνο Read ηνπ SqlDataReader αλαθηά ηελ επόκελε γξακκή από ηελ ΒΓ. Δπηζηξέθεη true αλ αλαθηήζεθε επηηπρώο ή false αλ ηειείωζαλ νη γξακκέο ηνπ απνηειέζκαηνο ηνπ εξωηήκαηνο. Δπνκέλωο ηππηθά θαινύκε ηελ Read ζην πιαίζην κηαο εληνιήο while όπωο δείρλεη ν αθόινπζνο θώδηθαο: try { … while (dataReader.Read()) { // Κώδηθαο πνπ επεμεξγάδεηαη ηελ ηξέρνπζα γξακκή // ηνπ απνηειέζκαηνο } } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #8: Ανάκτηση δεδομένων γραμμής και εμφάνισή τους Αλαθηνύκε ηα δεδνκέλα θαη ηα εκθαλίδνπκε: try { … while (dataReader.Read()) { int orderId = dataReader.GetInt32(0); DateTime orderDate = dataReader.GetDateTime(1); DateTime shipDate = dataReader.GetDateTime(2); string shipName = dataReader.GetString(3); string shipAddress = dataReader.GetString(4); string shipCity = dataReader.GetString(5); string shipCountry = dataReader.GetString(6); Console.WriteLine( “Παξαγγειία: {0}\nΗκεξνκελία: {1}\nΗκεξνκελία Απνζηνιήο: {2}\n" + "Σηνηρεία απνζηνιήο: {3}\n{4}\n{5}\n{6}\n\n", orderId, orderDate, shipDate, shipName, shipAddress, shipCity, shipCountry); } } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #9: Κλείσιμο του SqlReader Η εληνιή Close ηνπ SqlDataReader θιείλεη ηνλ SqlDataReader. Θα πξέπεη λα θαινύκε απηήλ ηελ εληνιή αθνύ ηειεηώζνπκε ηελ επεμεξγαζία ηωλ εγγξαθώλ ηνπ απνηειέζκαηνο, έηζη ώζηε λα καο επηηξαπεί λα ρξεζηκνπνηήζνπκε ην SqlConnection αληηθείκελν γηα ηελ εθηέιεζε επηπιένλ εληνιώλ: try { … while (dataReader.Read()) { … } dataReader.Close(); } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα #10: Κλείσιμο της σύνδεσης με την ΒΔ Τειηθά ζα πξέπεη λα θιείζνπκε ηελ ζύλδεζε κε ηελ ΒΓ. Απηό γίλεηαη ζην ηκήκα finally κεηά ην catch: try { … } catch (SqlException e) { … } finally { dataConnection.Close(); } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Εκτέλεση του προγράμματος Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 SqlNullValueException Σην παξάδεηγκά καο αλ εθηειέζνπκε ην πξόγξακκα δίλνληαο ωο θωδηθό πειάηε ηελ ηηκή BONAP ζα πξνθιεζεί κία εμαίξεζε SqlNullValueException. Ο ιόγνο είλαη πωο δελ έρνπλ απνζηαιεί αθόκε όιεο νη παξαγγειίεο ζηνλ ελ ιόγω πειάηε θαη γηα θάπνηεο εγγξαθέο ηνπ ην πεδίν shipDate έρεη ηελ ηηκή null. Η εμαίξεζε ζα πξνθαιέζεη ηελ δηαθνπή ηνπ πξνγξάκκαηνο αλ δελ ηελ απνθύγνπκε. Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Παράδειγμα πρόκλησης SqlNullValueException Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Προγραμματιστική αποφυγή της εξαίρεσης SqlNullValueException Χξεζηκνπνηνύκε ηελ ζπλάξηεζε IsDBNull ηεο θιάζεο SqlDataReader ε νπνία επηζηξέθεη true αλ ε δνζείζα ωο παξάκεηξνο ζηήιε, έρεη ηελ ηηκή null. Σην παξάδεηγκά καο ε IsDBNull κπνξεί λα ρξεζηκνπνηεζεί όπωο θαίλεηαη ζηελ επόκελε δηαθάλεηα. Σην παξάδεηγκα αλ ε ηηκή ηεο ζηήιεο 2 είλαη null ζηελ ΒΓ, απιά εκθαλίδεηαη έλα κήλπκα πνπ ιέεη πωο ε παξαγγειία δελ έρεη απνζηαιεί αθόκε. Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Περίληψη #1 Δξγαζία Τη πξέπεη λα θάλω Πωο δεκηνπξγνύκε κία ζύλδεζε κε κία ΒΓ ηνπ SQL Server; Γειώλνπκε ηελ ζύλδεζε θαη δεκηνπξγνύκε έλα αληηθείκελν ηεο ζύλδεζεο θαιώληαο έλαλ constructor ηεο θιάζεο System.Data.SqlClient.SqlConnection όπωο θαίλεηαη ζηνλ αθόινπζν θώδηθα: using System.Data.SqlClient; … SqlConnection dataConnection = new SqlConnection(); Πωο πξνζδηνξίδνπκε ηηο ιεπηνκέξεηεο ηεο ζύλδεζεο θαη αλνίγνπκε ηελ ζύλδεζε; Χξεζηκνπνηνύκε έλα αληηθείκελν ηεο θιάζεο SqlConnectionStringBuilder γηα λα δώζνπκε ηηο πιεξνθνξίεο ηεο ζύλδεζεο θαη λα ζρεκαηίζνπκε ην connection string. Σηελ ζπλέρεηα θαηαρωξνύκε απηό ην string ζην ConnectionString ηεο ζύλδεζεο θαη θαινύκε ζηελ ζύλδεζε ηελ Open(): SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = ".\\SQLExpress"; builder.InitialCatalog = "Northwind"; builder.IntegratedSecurity = true; dataConnection.ConnectionString = builder.ConnectionString; dataConnection.Open(); Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Περίληψη #2 Δξγαζία Τη πξέπεη λα θάλω Πωο ζρεκαηίδνπκε εξωηήκαηα πξνο ηελ ΒΓ; Γεκηνπξγνύκε κία SqlCommand, ζέηνπκε ηελ ζύλδεζε (ηδηόηεηα Connection), ηνλ ηύπν (ηδηόηεηα CommandType) θαη ην εξώηεκα (ηδηόηεηα CommandText), όπωο δείρλεη ην αθόινπζν παξάδεηγκα: SqlCommand dataCommand = new SqlCommand(); dataCommand.Connection = dataConnection; dataCommand.CommandType = CommandType.Text; dataCommand.CommandText = "SELECT OrderID, OrderDate, ShippedDate, ShipName, ShipAddress, " + "ShipCity, ShipCountry " + "FROM Orders WHERE CustomerID = @CustomerIdParam"; Πωο εθηεινύκε ηα εξωηήκαηα; Δθόζνλ ην εξώηεκα επηζηξέθεη έλα ζύλνιν ηηκώλ (π.ρ. όπωο ζπκβαίλεη ζε κία Select) θαινύκε ζην SqlCommand αληηθείκελν ηελ ExecuteReader() κέζνδν, ε νπνία επηζηξέθεη έλα αληηθείκελν SqlDataReade, όπωο θαίλεηαη ζηνλ θώδηθα πνπ αθνινπζεί: SqlDataReader dataReader = dataCommand.ExecuteReader(); Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Περίληψη #3 Δξγαζία Τη πξέπεη λα θάλω Πωο αλαθαινύκε ηα απνηειέζκαηα ηνπ εξωηήκαηνο από ηνλ SqlDataReader; Ο SqlDataReader παξέρεη ηελ κέζνδν Read() ε νπνία καο πεγαίλεη ζηελ επόκελε γξακκή ηνπ απνηειέζκαηνο θαη επηζηξέθεη true αλ ππάξρεη επόκελε γξακκή. Δπηζηξέθεη false αλ ηειείωζαλ νη γξακκέο ηνπ απνηειέζκαηνο. Έηζη κπνξνύκε λα ρξεζηκνπνηήζνπκε ηελ κέζνδν ζε έλα while, όπωο δείρλεη ην αθόινπζν παξάδεηγκα: while (dataReader.Read()) { // Κώδηθαο πνπ επεμεξγάδεηαη ηελ ηξέρνπζα γξακκή // ηνπ απνηειέζκαηνο } Πωο αλαθηώ ηα δεδνκέλα κηαο γξακκήο ηνπ απνηειέζκαηνο; Αλάινγα κε ηνλ ηύπν ηεο θάζε ζηήιεο ηνπ απνηειέζκαηνο θαιώ ηελ θαηάιιειε κέζνδν GetX ζηνλ SqlDataReader. Γηα παξάδεηγκα ηελ GetInt32 αλ πξόθεηηαη γηα αθέξαην αξηζκό, δίλνληαο θαη ηνλ αξηζκό ηεο ζηήιεο (0 γηα ηελ πξώηε, 1 γηα ηελ δεύηεξε θιπ.) όπωο δείρλεη ην αθόινπζν παξάδεηγκα: while (dataReader.Read()) { int orderId = dataReader.GetInt32(0); DateTime orderDate = dataReader.GetDateTime(1); … } Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010 Ερωτήσεις; Καθαξόληδαο Γηώξγνο Τκήκα Τερλνινγίαο Πιεξνθνξηθήο θαη Τειεπηθνηλωληώλ, ΤΔΙ Λάξηζαο Σύγγξακκα πνπ ρξεζηκνπνηήζεθε: Microsoft Visual C# 2010 Step by Step, by John Sharp, Microsoft Press, 2010
© Copyright 2024 Paperzz