while (dataReader.Read())

Καθαξόληδαο Γηώξγνο
Τι θα δούμε σε αυτό το μάθημα;

Αλάθηεζε δεδνκέλωλ από ηνλ 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