Download Document

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Microsoft SQL Server wikipedia , lookup

Entity–attribute–value model wikipedia , lookup

Concurrency control wikipedia , lookup

Extensible Storage Engine wikipedia , lookup

Open Database Connectivity wikipedia , lookup

Microsoft Jet Database Engine wikipedia , lookup

Database wikipedia , lookup

Functional Database Model wikipedia , lookup

Relational model wikipedia , lookup

Clusterpoint wikipedia , lookup

ContactPoint wikipedia , lookup

Database model wikipedia , lookup

Transcript
1
T U T O R I A L
24
Address Book
Application
Introducing Database
Programming
 2009 Pearson Education, Inc. All rights reserved.
2
Outline
24.1
24.2
24.3
24.4
Test-Driving the Address Book Application
Planning the Address Book Application
Creating Database Connections
Programming the Address Book
Application
 2009 Pearson Education, Inc. All rights reserved.
3
Objectives
In this tutorial you will learn:
■ Connect to databases.
■ Create LINQ to SQL classes.
■ View the contents of a SQL Server Express
database.
■ Add database controls to Windows Forms.
■ Use the Data Sources window.
■ Use LINQ to query a database.
■ Read information from and update information
in databases.
 2009 Pearson Education, Inc. All rights reserved.
4
Introduction
■ Sequential-access files are inappropriate for
large instant-access applications.
■ Instant access is made possible by databases.
– Individual database records can be accessed directly
without sequentially searching.
– Databases have been used in business applications
for decades.
■ LINQ greatly simplifies manipulating databases,
which previously required the use of Structured
Query Language (SQL).
 2009 Pearson Education, Inc. All rights reserved.
5
24.1 Test-Driving the Address Book Application
Application Requirements
You have been asked to create an address book
application that stores the first name, last name, e-mail
address and phone number of multiple people in a
database table. Each entry should be stored as a
different row in the table. The user should be able to
navigate through the data, add rows, delete rows and
save changes to the data. Specific entries should be
retrievable by searching the data by last name.
 2009 Pearson Education, Inc. All rights reserved.
6
Test-Driving the Address Book Application
■ Run the completed application (Fig. 24.1).
■ The BindingNavigator at the top of the Form is the
strip of Buttons below the window’s title bar.
BindingNavigator
ReadOnly Address ID:
TextBox
Labels and TextBoxes display
contact information
Find an entry by last name
GroupBox
Browse All Entries Button
Figure 24.1 | Address Book application.
 2009 Pearson Education, Inc. All rights reserved.
7
Test-Driving the Address Book Application (Cont.)
■ Click the Move next, Move last, Move
previous and Move first Buttons (Fig. 24.2) to
navigate through entries.
Move first Button
Move previous Button
Move next Button
Move last Button
Figure 24.2 | Navigating the entries in the Address Book application.
 2009 Pearson Education, Inc. All rights reserved.
8
Test-Driving the Address Book Application (Cont.)
■ Click the Add new Button
(Fig. 24.3).
– The Address ID: TextBox is automatically filled in with
the value 0.
– Fill in the data fields, then click the Save Data Button
Save Data Button
Add new Button
0 is placed in
Address ID: TextBox
Figure 24.3 | Adding an entry in the Address Book application.
 2009 Pearson Education, Inc. All rights reserved.
9
Test-Driving the Address Book Application (Cont.)
■ Navigate to the entry for Lisa Black (the first entry).
■ Change the text in the Email: TextBox and save the
changes to this entry. (Fig. 24.4).
Email: field updated
Figure 24.4 | Editing an entry in the Address Book application.
 2009 Pearson Education, Inc. All rights reserved.
10
Test-Driving the Address Book Application (Cont.)
■ Enter Brown in the TextBox of the Find an entry by
last name GroupBox, then click the Find Button
(Fig. 24.5).
■ Note that the BindingNavigator now shows 1 of 2,
because there are only two entries with the last name
Brown.
Figure 24.5 | Browsing entries by last name.
 2009 Pearson Education, Inc. All rights reserved.
11
Test-Driving the Address Book Application (Cont.)
■ Navigate to an entry and click the Delete Button
(Fig. 24.6).
■ The BindingNavigator now displays 4 of 6
instead of 4 of 7.
Click the Delete Button
Figure 24.6 | Deleting an entry in the Address Book application.
 2009 Pearson Education, Inc. All rights reserved.
12
24.2 Planning the Address Book Application
When the Form loads
Display the first entry in the AddressBook database
When the user clicks the BindingNavigator’s auto-generated Add
new Button
Add a new entry
When the user clicks the BindingNavigator’s auto-generated Save
Data Button
Update the database with any new, deleted or updated entries
 2009 Pearson Education, Inc. All rights reserved.
13
24.2 Planning the Address Book Application (Cont.)
When the user clicks the BindingNavigator’s auto-generated Delete
Button
Delete the current entry displayed in the Form
When the user clicks the Browse All Entries Button
Display the first entry in the database and allow the user to
browse all entries with the BindingNavigator
Clear the search text box
When the user clicks the Find Button
If no entries have a last name that matches the input string,
then display empty TextBoxes
Otherwise, display the first entry with the specified last name
and allow the user to browse through all matching entries
with the BindingNavigator
 2009 Pearson Education, Inc. All rights reserved.
Action/Control/Event (ACE) Table for
the Address Book Application
14
■ Use an ACE table to convert pseudocode into Visual
Basic (Fig. 24.7).
Action
Control
Event
Label the application’s controls
searchLabel,
AddressIDLabel,
FirstNameLabel,
LastNameLabel,
EmailLabel,
PhoneNumberLabel
AddressBookForm
Display the first entry in the
Load
AddressBindingSource
AddressBook database
AddressBindingNavigatorAddNewItem
Add a new entry
Click
AddressIDTextBox,
FirstNameTextBox,
LastNameTextBox,
EmailTextBox,
PhoneNumberTextBox
Figure 24.7 | ACE table for the Address Book application. (Part 1 of 3.)
 2009 Pearson Education, Inc. All rights reserved.
Action/Control/Event (ACE) Table for
the Address Book Application (Cont.)
Action
Update the database with any
new, deleted or updated entries
Control
Event
AddressBindingNavigatorSaveItem
Click
AddressBindingSource,
database (object of class AddressBookDataClassesDataContext)
AddressBindingNavigatorDeleteItem
Delete the current entry
15
Click
AddressBindingSource
displayed in the Form
Click
browseAllButton
Display the first entry in the
AddressBindingSource
database and allow the user to
browse all entries with the
BindingNavigator
Clear the search text box
searchTextBox
Figure 24.7 | ACE table for the Address Book application. (Part 2 of 3.)
 2009 Pearson Education, Inc. All rights reserved.
Action/Control/Event (ACE) Table for
the Address Book Application (Cont.)
Action
If no entries have a last name that
matches the input string,
Control
Event
findButton
Click
16
searchTextBox,
AddressBindingSource
then display empty TextBoxes
Otherwise, display the first entry
with the specified last name and
searchTextBox,
AddressBindingSource
allow the user to browse through all
matching entries with the
BindingNavigator
Figure 24.7 | ACE table for the Address Book application. (Part 3 of 3.)
 2009 Pearson Education, Inc. All rights reserved.
Adding a Database Connection to the
Address Book Application
17
■ Create a new Windows Forms Application
named AddressBook.
■ Change the name of the source file to
AddressBook.vb and change the Form’s Name
to AddressBookForm.
■ Change the Form’s Font to 9pt Segoe UI. Then
set the Form’s Text property to Address Book.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Database Connection to the
Address Book Application (Cont.)
18
■ Select Tools > Connect to Database...
– Select Microsoft SQL Server Database File.
– Click Continue to open the Add Connection dialog.
■ Click Browse..., and open the AddressBook.mdf
database file.
Data source type
Location of database file
Figure 24.8 | Adding a database with the Add Connection dialog.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Database Connection to the
Address Book Application (Cont.)
19
■ Select View > Database Explorer.
■ A database table stores related information in rows
and columns.
■ To view the contents of the Addresses table:
– Expand the AddressBook.mdf node in the Database
Explorer, then expand the Tables node.
– Right click Addresses, and select Show Table Data
(Fig. 24.9).
 2009 Pearson Education, Inc. All rights reserved.
Adding a Database Connection to the
Address Book Application (Cont.)
20
Click to display the
database’s tables
Right click the Addresses node
Select to view the table’s contents
Figure 24.9 | Viewing the Addresses table.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Database Connection to the
Address Book Application (Cont.)
21
■ Figure 24.10 displays the contents of the Addresses
table used in the Address Book application.
■ A record is a table row, and a field is a table column.
Fields (columns)
Records (rows)
Figure 24.10 | Addresses table data.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Database Connection to the
Address Book Application (Cont.)
22
■ A table should contain a primary key.
– This is a field containing unique values to distinguish
records from one another.
– In this table, the AddressID field is the primary key.
■ Right click the Addresses tab in the IDE and
select Close.
 2009 Pearson Education, Inc. All rights reserved.
23
Modeling the Database with LINQ to SQL Classes
■ LINQ to SQL classes create an in-memory model
of your application’s database.
– These classes use ADO.NET technologies to retrieve
information from and send information to the database.
– LINQ to SQL classes manage all the ADO.NET code
behind the scenes.
 2009 Pearson Education, Inc. All rights reserved.
24
Modeling the Database with LINQ
to SQL Classes (Cont.)
■ Right click the AddressBook project in the Solution
Explorer and select Add > New Item....
– In the Add New Item dialog, select LINQ to SQL
Classes and add AddressBookDataClasses.dbml
(Fig. 24.11).
LINQ to SQL
Classes
template
Figure 24.11 | Adding LINQ to SQL classes.
 2009 Pearson Education, Inc. All rights reserved.
Modeling the Database with LINQ
to SQL Classes (Cont.)
25
■ In the Object Relational Designer expand the
AddressBook.mdf node in the Database Explorer.
– Expand the Tables node.
– Drag the Addresses table onto the left pane (Fig 24.12).
– Click Yes in the dialog prompt.
Address class created from
the Addresses table
Properties representing
columns in the Addresses
Figure 24.12 | Adding a table from the Database Explorer to the Object Relational
Designer.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Data Source to the
Address Book Application
26
■ A data-bound control displays information
contained in a data source.
– The BindingNavigator and TextBoxes in the
completed application are data-bound controls.
■ Open the Data Sources window (Fig. 24.13) by
selecting Data > Show Data Sources.
– Click the link Add New Data Source....
 2009 Pearson Education, Inc. All rights reserved.
Adding a Data Source to the
Address Book Application (Cont.)
27
Add New Data Source Button
Add New Data Source link
Figure 24.13 | Data Sources window.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Data Source to the
Address Book Application (Cont.)
28
■ This opens the Data Source Configuration Wizard.
■ Select Object in the wizard (Fig. 24.14) and click Next
>.
Select Object as the
data source type
Figure 24.14 | Data Source Configuration Wizard dialog.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Data Source to the
Address Book Application (Cont.)
29
■ Expand the AddressBook node and select the Address
class as in Figure 24.15 and click Finish.
– If the Address class is not displayed, select File > Save All.
Select the Address class as
the object data source
Figure 24.15 | Select Address to add a data source that can bind
Address information to data-bound controls.
 2009 Pearson Education, Inc. All rights reserved.
Adding a Data Source to the
Address Book Application (Cont.)
30
■ An Address node now appears in the Data
Sources window (Fig. 24.16).
Data source name
Addresses table’s fields
represented in the data source
Figure 24.16 | Updated Data Sources window.
 2009 Pearson Education, Inc. All rights reserved.
31
Displaying the Address Fields on the Form
■ Open AddressBookForm in Design view, then click the
Address node in the Data Sources window
(Fig. 24.17).
■ Click the down arrow to view the items in the list.
– Select the Details option in the drop-down list to indicate that
the IDE should create a set of Label–TextBox pairs for each
field.
Address data source
Default control for displaying data
Select Details to display data in a set
of Label–TextBox pairs
Figure 24.17 | Selecting a display format for the data.
 2009 Pearson Education, Inc. All rights reserved.
32
Displaying the Address Fields on the Form (Cont.)
■ Drag the Address node from the Data
Sources window to the Form.
– The IDE creates a series of Labels and TextBoxes
(Fig. 24.18).
– The IDE also creates a BindingNavigator and a
BindingSource.
 2009 Pearson Education, Inc. All rights reserved.
33
Displaying the Address Fields on the Form (Cont.)
Auto-generated
BindingNavigator
Auto-generated Labels
and TextBoxes to display
contact information
Auto-generated data
binding objects
Figure 24.18 | Displaying a table on a Form using a series of Labels and TextBoxes.
 2009 Pearson Education, Inc. All rights reserved.
34
Displaying the Address Fields on the Form (Cont.)
■ The AddressID is used to uniquely identify each
record, so users should not be allowed to edit its
value.
– Set the Address ID: TextBox’s ReadOnly property to
True.
– Also set its TabStop property to False.
 2009 Pearson Education, Inc. All rights reserved.
35
Displaying the Address Fields on the Form (Cont.)
■ Reposition the GUI controls to place them in a more
natural order, then modify the application’s tab order
(Fig. 24.19).
Labels and TextBoxes
repositioned
Figure 24.19 | GUI controls repositioned.
 2009 Pearson Education, Inc. All rights reserved.
36
Coding the Form’s Load Event Handler
■ Line 3 (Fig. 24.20) refers to
AddressBookDataClassesDataContext— defined as
part of the LINQ to SQL classes.
■ This object has properties representing each table you
added to the AddressBookDataClasses LINQ to SQL
classes.
Figure 24.20 | Creating a DataContext object.
 2009 Pearson Education, Inc. All rights reserved.
37
Coding the Form’s Load Event Handler (Cont.)
■ The FillAll method (Fig. 24.21) defines a LINQ
query that retrieves each entry in the Addresses
table.
Figure 24.21 | Retrieving data from the database using LINQ.
 2009 Pearson Education, Inc. All rights reserved.
38
Coding the Form’s Load Event Handler (Cont.)
■ The From clause specifies the data source.
■ The AddressBookDataClassesDataContext
object handles all the details of querying the database.
■ The LINQ clause Order By sorts the query results
according to the property specified after the Order
By keywords.
 2009 Pearson Education, Inc. All rights reserved.
39
Coding the Form’s Load Event Handler (Cont.)
■ Double click the Form to generate its event handler
(Fig. 24.22).
Figure 24.22 | Retrieving data from the database when the Form loads.
 2009 Pearson Education, Inc. All rights reserved.
40
Coding the Form’s Load Event Handler (Cont.)
■ Run the application (Fig. 24.23).
■ As you browse the entries, notice that they are sorted
alphabetically by last name.
■ The Save Data Button in the BindingNavigator is
disabled.
Save Data button disabled
Figure 24.23 | Browsing entries in the Address Book application.
 2009 Pearson Education, Inc. All rights reserved.
Enabling the BindingNavigator’s
Save Data Button
41
■ Set the Save Data Button’s Enabled property to True.
■ Double click the Save Data Button to create its Click
event handler (Fig. 24.24).
Validate the Form’s input controls
Save changes to the BindingSource
Update the database on disk
Figure 24.24 | Click event handler for the Save Data Button.
 2009 Pearson Education, Inc. All rights reserved.
Enabling the BindingNavigator’s
Save Data Button (Cont.)
42
■ The Validate method validates any of the
controls on the Form that implement Validating
or Validated events.
■ The EndEdit method ensures that the data
source is updated with any changes made by the
user.
■ The SubmitChanges method writes the changes
to the SQL Server database on disk.
■ The BindingSource’s MoveFirst method to
move to the first entry.
 2009 Pearson Education, Inc. All rights reserved.
Searching the LastName Field in the
AddressBook.mdf Database
43
■ Add to the Form a Label named searchLabel, a
TextBox named searchTextBox and a Button named
findButton (Fig. 24.25).
■ Place these controls in a GroupBox named
findByLastNameGroupBox.
searchTextBox
Find an entry by last name GroupBox
findButton
searchLabel
Figure 24.25 | Add controls to search data by last name.
 2009 Pearson Education, Inc. All rights reserved.
Searching the LastName Field in the
AddressBook.mdf Database (Cont.)
44
■ Double click the Find Button to create its Click
event handler (Fig. 24.26).
■ A LINQ query retrieves entries where the last
name matches the name specified in
searchTextBox.
■ Because all entries returned by this query have the
same last name, the results are ordered the by
first name.
 2009 Pearson Education, Inc. All rights reserved.
Searching the LastName Field in the
AddressBook.mdf Database (Cont.)
45
Figure 24.26 | Retrieving entries with the specified last name.
 2009 Pearson Education, Inc. All rights reserved.
Adding the Browse All Entries Button
and Its Click Event Handler
46
■ Add a Button named browseAllButton and set its
Text property to Browse All Entries (Fig. 24.27).
Browse All Entries Button
Figure 24.27 | Adding the Browse All Entries Button to the Form.
 2009 Pearson Education, Inc. All rights reserved.
Adding the Browse All Entries Button
and Its Click Event Handler (Cont.)
47
■ Double click the Browse All Entries Button to
create its Click event handler (Fig. 24.28).
Refill the AddressBindingSource
with all address entries
Jump to the first entry
Clear the searchTextBox
Figure 24.28 | Click event handler for browseAllButton.
 2009 Pearson Education, Inc. All rights reserved.
48
Testing Your Completed Address Book Application
■ Enter a new contact, fill in the fields, then click
the Save Data Button.
■ Next, search for the last name of the contact that
you entered, using searchTextBox and
findButton.
■ Now click the Browse All Entries Button.
■ Test the delete function by deleting an entry and
then clicking the Save Data Button.
 2009 Pearson Education, Inc. All rights reserved.
49
Outline
■ Figure 24.29 presents the source code
for the application.
1
2
3
(1 of 4 )
Public Class AddressBookForm
' create a DataContext to interact with the AddressBook database
Private database As New AddressBookDataClassesDataContext()
4
5
6
7
8
9
10
' load all data from the Addresses table into the BindingSource
Private Sub FillAll()
Fill the BindingSource with data
' select all rows
AddressBindingSource.DataSource = _
Query the Addresses table
From entry In database.Addresses _
Order By entry.LastName _
11
12
13
Select entry
End Sub ' FillAll
14
15
' load data from the database when the Form loads
Private Sub AddressBookForm_Load(ByVal sender As System.Object, _
16
ByVal e As System.EventArgs) Handles MyBase.Load
17
18
' load all data from the Addresses table
19
20
DataContext class
used to interact with
the database
Order results by LastName
FillAll()
End Sub ' AddressBookForm_Load
 2009 Pearson Education,
Inc. All rights reserved.
50
Outline
(2 of 4 )
21
22
' saves changes to the database
23
24
Private Sub AddressBindingNavigatorSaveItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
25
26
Handles AddressBindingNavigatorSaveItem.Click
27
28
29
30
Validate() ' validate input fields
AddressBindingSource.EndEdit() ' indicate edits are complete
database.SubmitChanges() ' submit the changes to the database
31
' load all data from the Addresses table
32
33
34
FillAll()
35
36
Validate the Form’s
controls
Indicate edits are
complete
Update the database
AddressBindingSource.MoveFirst() ' jump to first entry
End Sub ' AddressBindingNavigatorSaveItem_Click
Move to the first item
in the results from the
database
 2009 Pearson Education,
Inc. All rights reserved.
51
Outline
(3 of 4 )
37
' handles Find Button's Click event
38
Private Sub findButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles findButton.Click
39
40
41
42
' select rows containing the specified last name
AddressBindingSource.DataSource = _
43
44
From entry In database.Addresses _
Where entry.LastName = searchTextBox.Text _
45
46
Order By entry.FirstName _
Select entry
47
48
49
Fill the BindingSource with data
Query the Addresses table
Entries with the specified LastName
Order results by FirstName
AddressBindingSource.MoveFirst() ' jump to first entry
End Sub ' findButton_Click
 2009 Pearson Education,
Inc. All rights reserved.
52
Outline
(4 of 4 )
50
51
52
' handles Browse All Entries Click event
Private Sub browseAllButton_Click( _
53
54
55
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles browseAllButton.Click
56
57
' load all data from the Addresses table
FillAll()
58
59
60
61
AddressBindingSource.MoveFirst() ' jump to first entry
searchTextBox.Clear() ' clear the search TextBox
End Sub ' browseAllButton_Click
62 End Class ' AddressBookForm
 2009 Pearson Education,
Inc. All rights reserved.