Sumário Itens Encontrados: 320 Chapter 1: Introduction to Oracle NET Connectivity 1 Chapter 2: ODP.NET: A Functional Overview 19 Chapter 3: Connecting to Oracle with ODP.NET 49 Chapter 4: Retrieving and Manipulating Data with ODP.NET 69 Chapter 5: Using PL/SQL and NET CLR Stored Procedures with ODP.NET 117 Chapter 6: ODP.NET Globalization 161 Chapter 7: Transactions with ODP.NET 187 Chapter 8: Oracle Database Change Notifications with ODP.NET 205 Chapter 9: Using Oracle Database Streams Advanced Queuing with ODP.NET 223 Chapter 10: Oracle XML Support 253 Chapter 11: ODP.NET Security Features 287 Chapter 12: ODP.NET Performance 317 Chapter 13: Design Patterns and Considerations in Using ODP.NET 351 Chapter 14: ODT.NET Tool Basics 373 Chapter 15: Building Data-Driven Applications with ODT.NET 401 Index 429ivMaking the Transition from SQL Server to Oracle 2Introducing Oracle Connectivity 3Accessing Oracle from Unmanaged Code 4Using OLEDB in Unmanaged Code 5Oracle Provider for OLEDB 5MS OLEDB Provider for Oracle 6Using ODBC in Unmanaged Code 6Oracle ODBC Driver 6Microsoft ODBC for Oracle 7Using OO4O in Unmanaged Code 7Accessing Oracle from Managed Code 8Using OLEDB.NET in Managed Code 8Using ODBC.NET in Managed Code 9Using the Microsoft NET Managed Provider for Oracle 11Introducing ODP.NET 11Understanding the ODP.NET Architecture 12vUnderstanding the ODP.NET Classes 12Accessing Data using ODP.NET 13Using ODP.NET in ASP.NET Projects 13Considering ODP.NET Performance 15Introducing the Oracle Suite of Products 15Summary 17Exploring Oracle Features Accessible in ODP.NET Version 9 19Manipulating XML 20Manipulating LOBs 20Using PL/SQL Associative Array Binding 21Supporting Active Data Objects (ADO.NET) 2.0 22Accessing Oracle Features from ODP.NET Version 10 22Supporting Oracle Grids 23Supporting Multiple Oracle Homes 23Using Floating Point Data Types 24Using Statement Caching 24Supporting Command Cancellation and Timeout 25Retrieving Parameters Programmatically 26Supporting NET Stored Procedures 26Using Client Identifiers 26Using Database Change Notifications 27Managing Connection Pools 28Optimizing Connection Pools for RAC 28Using a REF Cursor as an IN/OUT Parameter 29Using 64-bit ODP.NET 29Controlling the FetchSize Property 29Configuring ODP.NET 30viAccessing Oracle Features from ODP.NET Version 11 30Enhancing Performance 31Deploying ODP.NET Using xcopy 31Supporting Oracle User Defined Types (UDTs) 31Performing Bulk Copy Operations 32Using Windows Authenticated User Connections Pooling 32Publishing Connection Pool Performance Counters 33Supporting Self-Tuning for Applications 34Using Oracle Streaming AQ 34Supporting Promotable Local Transactions 35Using ODP.NET Security Enhancements 37Running Callbacks for HA Event Notifications 38Starting Up and Shutting Down Databases 38Getting Started 39Installing Oracle Database 11g 39Installing ODAC.NET 43Summary 48Connecting via TNS 49Understanding the TNSNames.ora file 51Connecting in Other Ways 52Connecting Without TNSNames.ora 52Connecting via EZConnect 53Learning the ODP.NET Connection Parameters 54Connecting with Connection Pooling Activated 54Connecting via Integrated Windows Authentication 57Connecting with Special Privileges 58Using Other Connection String Attributes 59viiChecking Whether ODP.NET Is Installed 60Dynamically Building an ODP.NET Connection String 61Using the OracleConnectionStringBuilder Class 61Retrieving Available Oracle Data Sources 62Understanding Transparent Application Failover 62Enabling TAF in Your Application 63Using TAF Callbacks 65Summary 67Understanding ODP.NET Data Types 69Creating a Sample Table 73Retrieving Multiple Rows of Data 76Retrieving a Single Value 78Handling NULL Values in ODP.NET 79Retrieving Data into a Dataset 80Using Parameterized Queries 81Updating Data 83Executing a Single INSERT, UPDATE, or DELETE Statement 84Committing Dataset Changes to the Database 85Generating Command Objects 88Handling Master-Detail Relationships 90Creating a Second Table 90Retrieving from Multiple Tables 91Binding a NET Form to Your Dataset 92Committing Changes to Multiple Tables 94Defining Table Relationships and Constraints in a DataSet 95Manipulating LOBs and BFILEs 97Uploading BLOB Data 97Retrieving BLOB Data 99Inserting CLOB/NCLOB Data 100Retrieving CLOB/NCLOB Data 101Creating BFILE Directory Mappings 102Inserting BFILE Data 103Retrieving BFILE Data 104Manipulating RAW Data Types 105Creating Automatically Incrementing Columns 108Executing DDL from ODP.NET 109Discovering Schema in ODP.NET 110Handling ODP.NET Exceptions 113Summary 115Understanding the Basics of PL/SQL 117Working with Anonymous PL/SQL Blocks 118Executing an Anonymous PL/SQL Block 118Passing Data into an Anonymous Block 119Returning Data from an Anonymous Block 121Working with PL/SQL Stored Procedures 122Executing a PL/SQL Stored Procedure 123Passing Data into a PL/SQL Stored Procedure 124Retrieving Data from a PL/SQL Stored Procedure 126Executing a PL/SQL Function 127Handling Special IN and OUT Data Types 128Using Associative Arrays 128Passing Associative Arrays to PL/SQL Code 129Retrieving Associative Arrays from PL/SQL Code 131ixUsing VARRAYs 134Using Nested Tables 138Using REF Cursors 140Reading a Result Set from a REF Cursor Using the OracleDataReader 141Reading a Result Set from a REF Cursor Using the OracleDataAdapter 142Retrieving Multiple Active Result Sets 144User Defined Types (UDT) / OBJECT Types 146Handling Custom-Defined PL/SQL Errors 151Creating Your First NET CLR Stored Procedure 152Deploying a NET CLR Stored Procedure 154Executing the NET CLR Stored Procedure 157Summary 159Storing and Retrieving Double-Byte Data 161Using the OracleGlobalization class 165Setting Attributes at the Client Level 165Setting Attributes at the Session Level 166Setting Attributes at the Thread Level 167Changing the Session Language 167Formatting Calendar Dates 168Displaying Various Date Formats and Languages 169Designating Calendar Systems 171Representing Currencies 172Formatting Numbers 176Dealing with Time Zones 176Sorting and Comparing Strings 178Applying Country-Based Formatting 181Safely Mapping to NET Data Types 183xSummary 185Understanding Transactions and the OracleTransaction Class 187Executing Your First Transaction 189Executing Stored Procedures in a Transaction 191Performing Partial Rollbacks 192Working with Distributed Transactions 194Creating a Second Database Instance 195Executing Implicit Distributed Transactions 198Executing Explicit Distributed Transactions 201Executing Promotable Transactions 202Summary 203Understanding Database Change Notification 205Registering for Query-Based Change Notifications 206Registering for Object-Based Change Notifications 211Grouping Multiple Notification Requests 212Removing a Registration 213Retrieving Change Notification Information 214Choosing to Poll 216Considering Typical Usage Scenarios 217Thinking About Performance 221Summary 222Understanding the Basics of AQ 224Creating a Single-Consumer Queue 224Setting Up a Single-Consumer Queue 224xiEnqueuing and Dequeuing a Single Message 226Enqueuing and Dequeuing Multiple Messages 230Creating a Multiple-Consumer Queue 232Defining Recipients at the Queue Level 233Defining Recipients at the Message Level 237Enqueuing and Dequeuing Various Data Types in AQ 238Using UDT Data Types 238Using XML Data Types 244Waiting for Incoming Messages 246Dequeuing Messages Synchronously (Blocking) 247Dequeuing Messages Asynchronously (Nonblocking) 248Understanding the Useful OracleAQMessage Properties 250Summary 251Accessing Native XML Data (XMLTYPE) 254Creating an XMLTYPE Column 254Receiving XMLTYPE Data with XMLReader 255Receiving XMLTYPE Data with OracleXMLType 257Receiving XMLTYPE Data as a String 259Passing XML Data to and from PL/SQL Stored Procedures 260Validating Against XML Schema 262Using XSLT to Transform XML Data 266Retrieving Relational Data as XML 269Using the XMLCommandType property 269Using the Dataset.GetXML Method 272Using the DBMS_XMLGEN.GETXML Stored Procedure 273Manipulating Relational Data as XML 274Inserting Relational Data Using XML 274Updating Relational Data Using XML 278Deleting Relational Data Using XML 280Using XQuery to Query Data 282Summary 284Securing Your NET Applications 287Authenticating Data 289Implementing Username/Password Authentication 289Implementing Proxy Authentication 289Implementing ClientId-Based Username/Password Authentication 290Implementing Windows Authentication 291Understanding Code Access Security 291Using Code Groups 292Using Permission Sets 293Resolving Permissions in NET 294Seeing CAS in Action 295Configuring CAS Policies 297Configuring CAS Policies via the GUI 297Configuring CAS Policies Programmatically 301Requesting Permissions 301Requesting Permissions Declaratively 301Requesting Permissions Imperatively 304Ensuring That an Assembly Can Never Access Oracle 305Refusing Permissions Declaratively at the Assembly Level 306Denying Permissions Declaratively at the Method Level 307Denying Permissions Imperatively at the Method Level 308Using CAS with ASP.NET Applications 308Implementing Best Practices 313Preventing SQL Injection Attacks 313Preventing Nonpersistent Cross-Site Scripting Attacks 314Summary 315Measuring Performance 317Enabling the Performance Counters 318Measuring Performance Programmatically 320Speeding Up Connections with Connection Pooling 321Performing Faster Floating Point Arithmetic 323Executing Statements Faster 325Batching Your SQL Statements Together For Execution 325Using Statement Caching 328REF Cursors and Multiple Active Resultsets (MARs) 331Passing Parameters More Efficiently 331Using Bind Arrays to Pass Parameters in Bulk 331Using PL/SQL Associative Arrays 334Managing LOBs More Efficiently 337Enabling the LOB Cache 337Setting the InitialLOBFetchSize Property 340Retrieving Data More Efficiently 341Changing the FetchSize Property 341Using the Client Result Cache 343Importing Data More Efficiently 346Applying Optimization Best Practices 348Using Stored Procedures Whenever Possible 349Using the Right Data Access Object 349Summary 349xivProgramming to an Interface Instead of an Implementation 352Using the Data Access Object 353Using Microsoftâs Enterprise Library 354Creating Oracle.NET 355Creating the ODP.NET DAO Class 355Modifying the DBProviderMapping Class 361Modifying the DatabaseConfigurationView Class 362Compiling the New DAAB 364Using the ODP.NET DAO 364Editing the Application Configuration File 364Accessing Data via the DAAB 366Reading Multiple Rows into a Dataset 366Updating Multiple Rows from a Dataset 367Reading Data Using a DataReader 368Considering Best Practices 369Planning for Multiple Data Sources 369Keeping Provider-Specific Code Within the Data Tier 369Outputting Business Objects, Not Datasets 370Deciding How to Map Data Source Structures to Business Objects 370Deciding How to Manage Data Source Settings 370Summary 370Installing ODT.NET 373Managing the Database Schema 374Managing Users, Roles, and Object Privileges 377Editing and Debugging PL/SQL Code 380Creating a PL/SQL Procedure 380Creating a PL/SQL Package 383Debugging PL/SQL stored procedures 385Managing Oracle SQL Scripts 391Managing Advanced Queues 394Importing Tables and Data from External Data Sources 396Summary 399Designing Queries Visually 401Generating Strongly Typed DataSet Objects 404Generating UDT Classes 413Designing a UDT Object Visually 413Creating the UDT Object Table Visually 414Creating the OVERSEAS_JOBS Table 415Generating the UDT Classes 417Using the UDT in Your Project 420Generating ASP.NET Code 423Summary 427