Introduction |
|
1 | (1) |
|
|
2 | (1) |
|
What Does This Book Cover? |
|
|
2 | (1) |
|
What Do I Need to Use this Book? |
|
|
2 | (1) |
|
|
3 | (1) |
|
|
4 | (5) |
|
How to Download the Sample Code for the Book |
|
|
4 | (1) |
|
|
5 | (1) |
|
|
5 | (1) |
|
|
6 | (3) |
|
Relational Database Design |
|
|
9 | (30) |
|
|
10 | (2) |
|
Flat File Versus Relational Databases |
|
|
10 | (2) |
|
Determining Database Requirements |
|
|
12 | (3) |
|
Analyzing Our Business Needs |
|
|
12 | (2) |
|
Determining the Information To Be Tracked |
|
|
14 | (1) |
|
Determining the Logical Database Design |
|
|
15 | (21) |
|
Defining Tables (Entities) and Fields (Attributes) |
|
|
15 | (1) |
|
Identifying Tables and Fields |
|
|
15 | (5) |
|
|
20 | (1) |
|
|
20 | (1) |
|
|
21 | (2) |
|
|
23 | (1) |
|
|
23 | (1) |
|
One-To-Many Relationships |
|
|
24 | (1) |
|
Many-To-Many Relationships |
|
|
24 | (2) |
|
|
26 | (1) |
|
|
26 | (1) |
|
|
27 | (5) |
|
|
32 | (1) |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
34 | (2) |
|
Testing the Logical Database Design |
|
|
36 | (1) |
|
Implementing the Physical Database Design |
|
|
36 | (1) |
|
|
36 | (1) |
|
|
37 | (1) |
|
|
37 | (2) |
|
Microsoft SQL Server 2000 Desktop Engine |
|
|
39 | (38) |
|
The Microsoft SQL Server 2000 Desktop Engine |
|
|
39 | (3) |
|
Microsoft SQL Server 2000 Defined |
|
|
40 | (1) |
|
Why Use Desktop Engine Instead of Access? |
|
|
41 | (1) |
|
Obtaining and Installing Desktop Engine |
|
|
42 | (4) |
|
Where to Get a Copy of Desktop Engine |
|
|
43 | (1) |
|
Installation Requirements |
|
|
43 | (1) |
|
How To Install Desktop Engine |
|
|
43 | (1) |
|
Understanding What was Installed |
|
|
44 | (1) |
|
|
44 | (1) |
|
|
44 | (1) |
|
Distributed Transaction Coordinator |
|
|
44 | (1) |
|
Managing the Services with SQL Server Service Manager |
|
|
44 | (2) |
|
Using Access to Work with Desktop Engine / SQL Server |
|
|
46 | (27) |
|
Creating a New Desktop Engine / SQL Server Database from Microsoft Access |
|
|
47 | (18) |
|
Upsizing an Existing Access Database To SQL Server 2000 Desktop Engine |
|
|
65 | (8) |
|
Other Ways of Creating and Managing Desktop Engine Databases |
|
|
73 | (1) |
|
|
74 | (1) |
|
|
74 | (3) |
|
|
77 | (26) |
|
Querying SQL Server Desktop Engine Databases |
|
|
77 | (23) |
|
Transact SQL (T-SQL) versus Jet SQL |
|
|
78 | (1) |
|
|
78 | (1) |
|
Selecting Data from the Database |
|
|
78 | (6) |
|
Filtering Data with WHERE |
|
|
84 | (6) |
|
Modifying Data with INSERT, UPDATE, and DELETE |
|
|
90 | (3) |
|
|
93 | (1) |
|
Sorting Data with ORDER BY and GROUP BY |
|
|
93 | (4) |
|
Retrieving Data from Multiple Tables Using JOINS |
|
|
97 | (1) |
|
|
98 | (1) |
|
|
99 | (1) |
|
|
100 | (1) |
|
|
100 | (1) |
|
|
101 | (2) |
|
Exploring the Server Explorer |
|
|
103 | (24) |
|
Managing SQL Server Databases Using Server Explorer |
|
|
103 | (15) |
|
|
103 | (4) |
|
The Stored Procedures Node |
|
|
107 | (3) |
|
|
110 | (6) |
|
The Database Diagrams Node |
|
|
116 | (2) |
|
|
118 | (1) |
|
Exploring the Rest of Server Explorer |
|
|
118 | (6) |
|
SQL Server Databases Node |
|
|
118 | (1) |
|
SQL Server Instances Node |
|
|
119 | (3) |
|
|
122 | (2) |
|
The Data Connections Node |
|
|
124 | (1) |
|
|
124 | (1) |
|
|
125 | (2) |
|
The User Interface for the Database |
|
|
127 | (46) |
|
|
128 | (1) |
|
Creating a Simple Database Application |
|
|
129 | (38) |
|
A Brief Introduction to ADO.NET |
|
|
130 | (1) |
|
|
131 | (1) |
|
|
131 | (1) |
|
|
132 | (1) |
|
|
133 | (12) |
|
Building the Data Container |
|
|
145 | (3) |
|
|
148 | (6) |
|
Displaying Database Information to the User |
|
|
154 | (1) |
|
Compiling and Running the Project |
|
|
154 | (2) |
|
What's Behind the Curtain? |
|
|
156 | (5) |
|
|
161 | (6) |
|
|
167 | (2) |
|
|
169 | (1) |
|
|
170 | (3) |
|
|
173 | (64) |
|
A Short History of Data Access |
|
|
174 | (4) |
|
|
175 | (3) |
|
Application Architectures |
|
|
178 | (4) |
|
|
178 | (2) |
|
|
180 | (1) |
|
|
181 | (1) |
|
|
182 | (1) |
|
ADO's Strengths and Weaknesses |
|
|
182 | (1) |
|
|
183 | (54) |
|
|
184 | (1) |
|
|
184 | (1) |
|
|
185 | (1) |
|
|
186 | (1) |
|
|
187 | (2) |
|
|
189 | (7) |
|
|
196 | (1) |
|
|
197 | (2) |
|
|
199 | (3) |
|
|
202 | (9) |
|
|
211 | (2) |
|
The System.Data Namespace |
|
|
213 | (1) |
|
The System.Data.OleDb and System.Data.SqlClient Namespaces |
|
|
214 | (1) |
|
|
215 | (1) |
|
|
215 | (1) |
|
|
216 | (11) |
|
DataReader Sample Project |
|
|
227 | (8) |
|
|
235 | (1) |
|
|
235 | (2) |
|
Reading Data Into the DataSet |
|
|
237 | (56) |
|
The Product Management System Overview |
|
|
237 | (5) |
|
Creating the User Interface for the Search Screens |
|
|
242 | (21) |
|
Creating the Base Search Form Project |
|
|
243 | (11) |
|
Inheriting from the Base Search Form |
|
|
254 | (4) |
|
Implementing the Unique Functionality of the Products Search Form |
|
|
258 | (3) |
|
Implementing the Unique Functionality of the Suppliers Search Form |
|
|
261 | (2) |
|
Using the DataSet to Retrieve Data |
|
|
263 | (27) |
|
|
263 | (1) |
|
Populating a DataSet from Multiple Tables and Relating Them to Each Other |
|
|
264 | (9) |
|
Populating a DataSet from a SQL Statement |
|
|
273 | (2) |
|
Building the SQL Statement Based on User Input |
|
|
275 | (15) |
|
|
290 | (1) |
|
|
290 | (3) |
|
|
293 | (48) |
|
Simple Versus Complex Data Binding |
|
|
293 | (33) |
|
Binding the Results To the DataGrid |
|
|
294 | (3) |
|
Displaying the Search Results in the DataGrid |
|
|
297 | (5) |
|
Creating the Base Add/View/Edit Form |
|
|
302 | (11) |
|
Inheriting from the Base Data Form |
|
|
313 | (1) |
|
Implementing the Unique Functionality of the Add/View/Edit Products Form |
|
|
314 | (6) |
|
Implementing the Unique Functionality of the Add/View/Edit Suppliers Form |
|
|
320 | (2) |
|
Making the DataSets Accessible |
|
|
322 | (1) |
|
|
323 | (3) |
|
|
326 | (6) |
|
Other Data Considerations |
|
|
332 | (6) |
|
Using DataViews to Filter and Sort Data |
|
|
332 | (3) |
|
Using the DataReader to Retrieve Single Rows |
|
|
335 | (3) |
|
|
338 | (1) |
|
|
338 | (3) |
|
Updating the DataSet and Handling Errors |
|
|
341 | (40) |
|
Updating the Local Version of the DataSet |
|
|
341 | (9) |
|
Modifying the Add/View/Edit Products and Suppliers Screens to Update the Local DataSet |
|
|
342 | (1) |
|
Adding a New Record to the Local DataSet |
|
|
342 | (2) |
|
Deleting a Record in the Local DataSet |
|
|
344 | (3) |
|
Modifying an Existing Record in the Local DataSet |
|
|
347 | (3) |
|
Saving the Changes to the Database |
|
|
350 | (25) |
|
|
351 | (12) |
|
|
363 | (4) |
|
|
367 | (8) |
|
Testing the New Capabilities of Our Forms |
|
|
375 | (3) |
|
|
378 | (1) |
|
|
379 | (2) |
|
|
381 | (26) |
|
Handling Data Update Conflicts |
|
|
381 | (17) |
|
Handling Update Conflicts with Optimistic or Pessimistic Concurrency |
|
|
383 | (1) |
|
Implementing Optimistic Concurrency with DataSets |
|
|
384 | (1) |
|
Version Number or Timestamp Method |
|
|
384 | (12) |
|
The Saving All Values Method |
|
|
396 | (2) |
|
|
398 | (2) |
|
Transactions in Database Applications |
|
|
398 | (2) |
|
Product Management System Tour |
|
|
400 | (4) |
|
Running a Complex Products Search |
|
|
400 | (1) |
|
Modifying Records Returned in the Search |
|
|
401 | (1) |
|
|
402 | (2) |
|
Generate an Update Conflict |
|
|
404 | (1) |
|
|
404 | (1) |
|
|
405 | (2) |
|
|
407 | (44) |
|
|
408 | (13) |
|
|
411 | (9) |
|
Grid Layout vs. Flow Layout |
|
|
420 | (1) |
|
An Inventory Web Application |
|
|
421 | (13) |
|
|
422 | (2) |
|
Improving Presentation of the DataGrid |
|
|
424 | (2) |
|
Adding a Unit Price Column |
|
|
426 | (1) |
|
|
427 | (4) |
|
|
431 | (3) |
|
|
434 | (15) |
|
|
435 | (6) |
|
|
441 | (2) |
|
|
443 | (3) |
|
|
446 | (2) |
|
Further Validation Controls |
|
|
448 | (1) |
|
|
449 | (1) |
|
|
449 | (2) |
|
|
451 | (52) |
|
|
451 | (4) |
|
|
452 | (3) |
|
|
455 | (1) |
|
|
455 | (7) |
|
|
456 | (6) |
|
Loading and Saving XML Data |
|
|
462 | (13) |
|
|
464 | (4) |
|
Checking the Validity of a Document |
|
|
468 | (2) |
|
|
470 | (5) |
|
|
475 | (6) |
|
|
478 | (1) |
|
Loading the DataSet Again |
|
|
479 | (2) |
|
|
481 | (16) |
|
Changing the XML Changes the DataSet |
|
|
481 | (1) |
|
|
482 | (5) |
|
|
487 | (3) |
|
Changing the DataSet Changes the XML |
|
|
490 | (7) |
|
Simplifying Data Manipulation with Typed DataSets |
|
|
497 | (2) |
|
|
499 | (1) |
|
|
500 | (3) |
|
|
503 | (56) |
|
|
504 | (23) |
|
Designing Our Web Service |
|
|
504 | (7) |
|
|
511 | (1) |
|
|
511 | (1) |
|
Returning Shipping Details for an Order |
|
|
512 | (1) |
|
Returning Shipping Details |
|
|
513 | (3) |
|
|
516 | (1) |
|
The GetShippingDetails Method |
|
|
516 | (3) |
|
Building the GetShippingDetails Method |
|
|
519 | (8) |
|
|
527 | (11) |
|
Testing More Eventualities |
|
|
537 | (1) |
|
|
538 | (4) |
|
|
538 | (4) |
|
|
542 | (3) |
|
|
545 | (10) |
|
|
545 | (3) |
|
|
548 | (1) |
|
|
549 | (1) |
|
Registering for the Service |
|
|
549 | (2) |
|
Referencing the Web Service |
|
|
551 | (1) |
|
|
552 | (3) |
|
|
555 | (1) |
|
|
556 | (3) |
|
|
559 | (64) |
|
|
559 | (2) |
|
|
560 | (1) |
|
|
561 | (39) |
|
|
565 | (2) |
|
|
567 | (2) |
|
The ConnectionMode and Connection Properties |
|
|
569 | (2) |
|
|
571 | (7) |
|
Overriding the ToString Method |
|
|
578 | (1) |
|
|
579 | (5) |
|
Using the Remote Connection Mode |
|
|
584 | (2) |
|
Creating RemoteConnection |
|
|
586 | (1) |
|
A Slight Change to the Client |
|
|
587 | (2) |
|
|
589 | (1) |
|
Automatically Detecting the Connection Type |
|
|
590 | (7) |
|
|
597 | (3) |
|
|
600 | (12) |
|
|
600 | (1) |
|
Building the ``ProviderGetSuppliers'' Stored Procedure |
|
|
600 | (1) |
|
Calling ``ProviderGetSuppliers'' |
|
|
601 | (5) |
|
Changing the Selected Supplier |
|
|
606 | (5) |
|
Calling ``GetSuppliers'' from the Web Service |
|
|
611 | (1) |
|
|
612 | (9) |
|
Building ``SetProductDetails'' |
|
|
613 | (3) |
|
|
616 | (3) |
|
Saving Changes Over the Web Service |
|
|
619 | (2) |
|
|
621 | (1) |
|
|
621 | (2) |
|
Case Study - B2B Application Integration Using XML |
|
|
623 | (58) |
|
|
624 | (3) |
|
|
627 | (12) |
|
Transferring the Document |
|
|
638 | (1) |
|
|
638 | (1) |
|
|
638 | (1) |
|
|
639 | (1) |
|
|
639 | (1) |
|
|
639 | (1) |
|
Receiving and Processing the Order |
|
|
639 | (39) |
|
|
640 | (6) |
|
Responding to Order Requests |
|
|
646 | (8) |
|
|
654 | (14) |
|
Building the Windows Service |
|
|
668 | (4) |
|
Sending the Order via a Web Service |
|
|
672 | (6) |
|
|
678 | (3) |
Index |
|
681 | |