| Foreword |
|
xv | |
|
|
| Foreword |
|
xvii | |
|
|
| Preface |
|
xix | |
| Acknowledgments |
|
xxvii | |
|
Data: Models, Applications, and APIs |
|
|
1 | (24) |
|
Information, Data Modeling, and Databases |
|
|
1 | (1) |
|
Database and API Fundamentals |
|
|
2 | (3) |
|
|
|
5 | (4) |
|
|
|
6 | (1) |
|
Benefits of the Relational Model |
|
|
7 | (1) |
|
Relational Model Support in ADO.NET |
|
|
8 | (1) |
|
Hierarchies, Objects, and Hybrids |
|
|
9 | (7) |
|
Modern Nonrelational Data |
|
|
11 | (1) |
|
|
|
12 | (1) |
|
Nonrelational Data and ADO.NET |
|
|
13 | (1) |
|
|
|
14 | (1) |
|
XML, Databases, and Universal Data Representation |
|
|
15 | (1) |
|
Data-centric Application Models |
|
|
16 | (3) |
|
Evolution of Data Access APIs |
|
|
19 | (5) |
|
|
|
24 | (1) |
|
|
|
25 | (44) |
|
Data Access and the .NET Architecture |
|
|
25 | (1) |
|
Two Patterns of Data Access |
|
|
26 | (1) |
|
|
|
27 | (15) |
|
OleDb and SqlClient Data Providers |
|
|
35 | (1) |
|
Writing Generic Data Access Code with ADO.NET Data Providers |
|
|
36 | (5) |
|
Cursors in the Data Provider Model |
|
|
41 | (1) |
|
Disconnected Mode and the DataSet |
|
|
42 | (4) |
|
|
|
46 | (19) |
|
|
|
47 | (4) |
|
|
|
51 | (3) |
|
The XmlDocument, XPath, and XPathNavigators |
|
|
54 | (6) |
|
Mixing XML and Data Providers |
|
|
60 | (5) |
|
Layout of the Managed Data Classes |
|
|
65 | (2) |
|
|
|
67 | (2) |
|
The Connected Model: Streaming Data Access |
|
|
69 | (58) |
|
.NET Data Providers and the Connected Model |
|
|
69 | (1) |
|
|
|
70 | (3) |
|
|
|
73 | (1) |
|
|
|
74 | (3) |
|
|
|
77 | (5) |
|
|
|
81 | (1) |
|
|
|
82 | (10) |
|
Command Preparation, Cancellation, Timeouts, and Cleanup |
|
|
92 | (2) |
|
Streaming Data through a DataReader |
|
|
94 | (3) |
|
Reading Column Values through IDataRecord |
|
|
97 | (6) |
|
Handling Large Data Columns |
|
|
101 | (2) |
|
|
|
103 | (4) |
|
|
|
107 | (17) |
|
|
|
111 | (4) |
|
How Connection Pooling Works |
|
|
115 | (6) |
|
How Declarative Transactions Work |
|
|
121 | (3) |
|
|
|
124 | (2) |
|
|
|
126 | (1) |
|
|
|
126 | (1) |
|
The DataSet Class: Sets of Relational Data |
|
|
127 | (50) |
|
|
|
127 | (2) |
|
DataSet as an In-memory Database |
|
|
128 | (1) |
|
What Can You Do with a DataSet? |
|
|
129 | (1) |
|
|
|
129 | (45) |
|
DataColumns, DataRows, and DataTables |
|
|
131 | (3) |
|
|
|
134 | (2) |
|
|
|
136 | (3) |
|
Keys, Relations, and Constraints |
|
|
139 | (4) |
|
Navigating through Relationships: Select and Find |
|
|
143 | (3) |
|
Adding, Retrieving, Changing, and Deleting Rows |
|
|
146 | (4) |
|
|
|
150 | (2) |
|
|
|
152 | (2) |
|
DataRow States and Versions |
|
|
154 | (5) |
|
|
|
159 | (2) |
|
|
|
161 | (4) |
|
|
|
165 | (6) |
|
DataSets and Nonrelational Types |
|
|
171 | (3) |
|
Defining an Information Schema |
|
|
174 | (2) |
|
|
|
176 | (1) |
|
DataAdapters: Synchronizing Databases and Datasets |
|
|
177 | (48) |
|
|
|
177 | (2) |
|
|
|
179 | (1) |
|
Populating a DataSet from a Managed Provider |
|
|
179 | (11) |
|
Using Fill with Schema and Mapping Information |
|
|
183 | (5) |
|
Error Handling during DataAdapter.Fill |
|
|
188 | (2) |
|
How DataAdapter.Fill Works |
|
|
190 | (5) |
|
ADO Integration in OleDbDataAdapter |
|
|
195 | (1) |
|
Updating a Database through DataAdapter |
|
|
196 | (16) |
|
|
|
199 | (7) |
|
Coding Update Logic Directly |
|
|
206 | (6) |
|
|
|
212 | (2) |
|
|
|
213 | (1) |
|
|
|
214 | (4) |
|
Refreshing DataSet Using Update and Merge |
|
|
216 | (2) |
|
Writing General Customized Commands |
|
|
218 | (2) |
|
|
|
218 | (1) |
|
Building a Batch Update Command |
|
|
219 | (1) |
|
DataSets and Nonrelational Data Types Revisited |
|
|
220 | (1) |
|
Should You Use DataSet or DataReader? |
|
|
221 | (2) |
|
|
|
223 | (2) |
|
Data Binding: ADO.NET and Graphical User Interfaces |
|
|
225 | (48) |
|
Windows Forms and Web Forms |
|
|
225 | (1) |
|
Patterns of Data Presentation |
|
|
226 | (1) |
|
|
|
227 | (16) |
|
Web Forms Data Binding Types |
|
|
230 | (3) |
|
Anatomy of Databound Control Types |
|
|
233 | (8) |
|
|
|
241 | (2) |
|
Data Binding with DataSets |
|
|
243 | (3) |
|
DataViews and Common Transformations |
|
|
246 | (8) |
|
Table and Column Mappings |
|
|
254 | (2) |
|
Editable List Controls: DataList and DataGrid |
|
|
256 | (9) |
|
|
|
256 | (3) |
|
|
|
259 | (6) |
|
Nonrelational Data and DataViews |
|
|
265 | (1) |
|
Integrating Visual Studio |
|
|
266 | (4) |
|
Server Explorer and Data Toolbox |
|
|
267 | (3) |
|
|
|
270 | (1) |
|
|
|
271 | (2) |
|
XML and Data Access Integration |
|
|
273 | (78) |
|
XML and Traditional Data Access |
|
|
273 | (1) |
|
|
|
274 | (24) |
|
Defining a DataSet's Schema |
|
|
275 | (5) |
|
Refining DataSet's XML Schema |
|
|
280 | (3) |
|
|
|
283 | (5) |
|
Writing XML Schemas from DataSet |
|
|
288 | (3) |
|
Microsoft-Specific Annotations |
|
|
291 | (1) |
|
Writing XML Data from DataSet |
|
|
292 | (6) |
|
Serialization, Marshaling, and DataSet |
|
|
298 | (4) |
|
|
|
302 | (20) |
|
The XmlDataDocument Class |
|
|
322 | (11) |
|
XmlDataDocuments and DataSets |
|
|
324 | (7) |
|
XmlDataDocument and DataDocumentXPathNavigator |
|
|
331 | (2) |
|
|
|
333 | (1) |
|
|
|
333 | (1) |
|
Document Composition and Decomposition |
|
|
334 | (1) |
|
SQL Server, XML, and Managed Data Access |
|
|
334 | (5) |
|
|
|
335 | (1) |
|
|
|
336 | (1) |
|
|
|
336 | (1) |
|
The SqlXml Managed Classes |
|
|
337 | (1) |
|
The SQLXML Web Application |
|
|
337 | (1) |
|
|
|
337 | (2) |
|
FOR XML in the SQLXMLOLEDB Provider |
|
|
339 | (1) |
|
|
|
339 | (1) |
|
|
|
339 | (1) |
|
|
|
339 | (9) |
|
|
|
348 | (3) |
|
Providers: ADO.NET and Data Providers |
|
|
351 | (50) |
|
|
|
351 | (2) |
|
Staying with OLE DB: A Summary of OLE DB Concepts |
|
|
353 | (3) |
|
Staying with OLE DB: Interaction with the OleDb Data Provider |
|
|
356 | (10) |
|
Main Cotypes and Type Mapping |
|
|
357 | (1) |
|
|
|
358 | (1) |
|
Executing Commands, Returning Results, and Using OpenRowset |
|
|
358 | (1) |
|
Command Results Format and Behaviors |
|
|
359 | (1) |
|
|
|
359 | (1) |
|
|
|
360 | (1) |
|
|
|
360 | (1) |
|
|
|
361 | (1) |
|
|
|
361 | (1) |
|
Supported and Unsupported Providers |
|
|
361 | (5) |
|
|
|
366 | (2) |
|
Implementing the Connection Class |
|
|
368 | (3) |
|
|
|
369 | (1) |
|
|
|
369 | (1) |
|
|
|
370 | (1) |
|
Implementing the Command Class |
|
|
371 | (4) |
|
|
|
371 | (2) |
|
|
|
373 | (1) |
|
|
|
374 | (1) |
|
Implementing the DataReader Class |
|
|
375 | (5) |
|
|
|
376 | (1) |
|
|
|
377 | (2) |
|
|
|
379 | (1) |
|
Implementing the DataAdapter Class |
|
|
380 | (2) |
|
|
|
380 | (1) |
|
|
|
381 | (1) |
|
|
|
382 | (1) |
|
Adding Enhanced Functionality |
|
|
382 | (1) |
|
Implementing XML Infoset Providers |
|
|
383 | (3) |
|
|
|
386 | (6) |
|
Implementing XPathNavigator |
|
|
392 | (4) |
|
Implementation Alternatives: Conclusions |
|
|
396 | (2) |
|
Is a Single Universal Data Access Model Possible? |
|
|
398 | (2) |
|
|
|
400 | (1) |
|
Consumers: ADO.NET Migration for Consumers |
|
|
401 | (58) |
|
|
|
401 | (1) |
|
ADO.NET for OLE DB Programmers |
|
|
402 | (5) |
|
|
|
403 | (1) |
|
Data Provider Transparency |
|
|
404 | (1) |
|
Using Provider-Specific Functionality |
|
|
405 | (1) |
|
|
|
405 | (1) |
|
|
|
406 | (1) |
|
System-Supplied Components |
|
|
406 | (1) |
|
|
|
407 | (1) |
|
|
|
407 | (1) |
|
|
|
407 | (3) |
|
ADO.NET for ADO Programmers |
|
|
410 | (5) |
|
|
|
410 | (5) |
|
ADO Connections, Commands, and Transactions |
|
|
415 | (2) |
|
Connections and Connection Strings |
|
|
416 | (1) |
|
|
|
416 | (1) |
|
Commands and Command Behaviors |
|
|
416 | (1) |
|
|
|
417 | (1) |
|
|
|
417 | (1) |
|
|
|
417 | (1) |
|
ADO.NET Versus ADO Disconnected Model |
|
|
417 | (8) |
|
|
|
418 | (1) |
|
|
|
419 | (1) |
|
What Happened to GetRows in ADO.NET? |
|
|
420 | (2) |
|
|
|
422 | (1) |
|
Update Statement Creation |
|
|
423 | (1) |
|
|
|
423 | (1) |
|
ADO.NET DataSet Extensions |
|
|
423 | (1) |
|
|
|
424 | (1) |
|
|
|
424 | (1) |
|
|
|
425 | (8) |
|
ADO.NET for ODBC Programmers |
|
|
433 | (10) |
|
|
|
434 | (1) |
|
|
|
435 | (1) |
|
|
|
436 | (1) |
|
Metadata and Schema Information |
|
|
436 | (1) |
|
|
|
437 | (6) |
|
ADO.NET for JDBC Programmers |
|
|
443 | (13) |
|
|
|
443 | (1) |
|
|
|
443 | (2) |
|
|
|
445 | (1) |
|
|
|
445 | (1) |
|
|
|
445 | (1) |
|
|
|
446 | (1) |
|
|
|
446 | (1) |
|
|
|
446 | (1) |
|
|
|
447 | (1) |
|
Executing Queries and Returning Results |
|
|
447 | (1) |
|
|
|
448 | (1) |
|
|
|
448 | (8) |
|
ADO.NET JDBC Programmers and the Disconnected Model |
|
|
456 | (1) |
|
SQL/J Part 0 and Typed DataSets |
|
|
457 | (1) |
|
|
|
458 | (1) |
|
ADO.NET and Various Types of Data |
|
|
459 | (12) |
|
|
|
459 | (2) |
|
ADO.NET with Server- and File-Based RDBMS |
|
|
461 | (3) |
|
ADO.NET with Homogeneous Hierarchical Data and ORDBMS |
|
|
464 | (1) |
|
ADO.NET and Network Data: Object Graphs, OODBMS, and Network DBMS |
|
|
465 | (2) |
|
ADO.NET and Structured Files, Multidimensional Data, and ORDBMS |
|
|
467 | (1) |
|
ADO.NET Flat Files and Semistructured Files |
|
|
468 | (1) |
|
|
|
469 | (2) |
| Appendix A Data Types and Type Mappings |
|
471 | (12) |
| Appendix B Expression Syntax |
|
483 | (8) |
| Appendix C Schema Inference Rules |
|
491 | (10) |
| Bibliography |
|
501 | (2) |
| Index |
|
503 | |