: Level 1
1.1 Pre requisites for this course
1.2 What is ADO.NET
1.3 Building your first application – Drag and Drop Winforms
- Adding a datasource to your winforms application
- ConnectionStrings section in Web.Config
- Brief introduction to a Strongly Typed Dataset
- Introduction to DataGridView or Details View for Winforms
- Introduction to TableAdapters
- Introduction to BindingSource
- Introduction to BindingNavigator
1.4 Building your first application – Drag And Drop ASP.NET
- Authentication, security and connection strings in web based applications
- A slightly more hands on approach
- Introduction to SqlDataSource
- Specifying your own queries to a SqlDataSource
- Tying together a SqlDataSource with a ConnectionString in the config file
- The ASP.NET GridView Control
- Tying an ASP.NET GridView to a SQLDataSource
- Enabling Paging/Sorting on GridView
- Why Drag & Drop is not all you need to know?
1.5 The connection object
- The SqlConnection Object
- Connecting to the database
- The ConnectionStringBuilder
- Connection Pooling
- Best practice: Open as late as possible and close as early as you can.
1.6 The command object
- The SqlCommand Object
- The various execute methods on a SqlCommand
- Fetching Scalar Values out of the database
1.7 Data Readers
- The SqlComamnd.ExecuteReader method
- Checking for the existence of rows in a data reader
- Fetching different datatypes out of a data reader
- The right usage and limitations of a SqlDataReader.
- CommandBehaviors when creating SqlDataReaders
- Configuring the Internal buffering behavior of SqlDataReader using CommandBehavior.SequentialAccess
- Batched TSQL commands
- Using Batched TSQL commands, or stored procedures to return multiple tabular results in a resultset
- Using a SqlDataReader to browse over multiple tabular results.
1.8 Asynchronous Commands
- Limitations of running Execute commands on a SqlCommand object
- Basics of ASynch execution
- The Begin/End design pattern for running Asynch operations
- Modifying a synchronous SqlDataReader application to convert it into an Asynch application
- Things to be careful of in an Asynch application.
1.9 Connected Nature of Commands and Connections |
: Level 2
- The need for disconnected objects
- Desirable characteristics for disconnected objects
- Disconnected data objects
- Business Objects
- Disconnected data objects
- Data Transfer Objects
- DataSet and family
2.1 Introduction to DataSet and Strongly typed DataSets
- Creating a Strongly Typed Dataset in Visual Studio
- Specifying relations between tables in Strongly typed datasets
- Examining the auto generated code.
- Using the strongly typed dataset - reading and writing to an XML file
- Controlling the XML output using the Nested Property on DataRelation
- Creating an application to load, edit, create, and save a strongly typed dataset
- Extending the same application to load, edit, create, and save a non-strongly typed dataset
- Compare the usage of strongly typed dataset versus non-strongly typed dataset
- Discussing other possibilities with disconnected objects
2.2 Working with disconnected data – adding and editing
- Creating a new row and adding it to a DataTable
- Examining the RowStates for Detached and Added rows
- Modifying a datarow contents
- Comparing the Added vs. Modified Rowstates
- Extracting Changes from a DataSet
- Setting Expressions on new data columns & limitations of non-strongly typed datasets
2.3 Working with disconnected data – Searching, Sorting
- Finding a specific row in a DataTable using the Find Method
- Specifying a primary key to a DataTable
- The difference between Removing and Deleting a row from a DataTable
- Finding more than one matching rows using the Select Method
- Sorting DataTable data
- Filtering data as per RowStates
- Comparing the filtering usage in strongly typed datasets
- Browsing through relational data in a dataset
2.4 Introduction to DataView objects
- Comparing a dataview to a database view
- DataTable.Select versus DataView.RowFilter
- Sorting using a DataView
- Limiting the number of columns in the resultset
- Comparing holding a reference to a DataTable, to creating a new DataTable
- Doing a select distinct equivalent on a DataTable
2.5 Level 2 Recap |
: Level 3
3.1 Filling Data – The DataAdapter
- Various ways of setting up a DataAdapter
- Demonstrating the interaction of SqlConnection and DataAdapter, and how DataAdapter gives you better connection pooling
- Modifying disconnected data
- Demonstrating that the data is indeed disconnected
3.2 Saving Data – CommandBuilder
- DataAdapter.Update
- The Update that inserts, updates and deletes
- Specifying Insert, Update and Delete commands to a DataAdapter
- Creating the commands automatically using a CommandBuilder object
- Demonstrating the connection between RowStates and the exact command called
- Why are the default CommandBuilder commands are woefully terrible
- Restrictions on using CommandBuilder
- Demonstrate options for fixing CommandBuilder commands Conflict Option
3.3 Saving Data – Your own commands
- Situations where you must specify your own commands
- Specifying Stored Procedures to SqlCommands
- Adding Parameters to a SqlCommand
- Connecting a DataTable with a Stored procedure
- The SourceColumn property of a SqlParameter
- Concurrency Issues
- Adding new key values to new rows
3.4 A quick primer on concurrency
- Concurrency Management Basics
- Avoiding concurrency conflicts
- Optimistic vs. Pessimistic Concurrency Checks
- Various kinds of Optimistic concurrency mechanisms and their problems
- Concurrency management in hierrachical data
3.5 Primary Concurrency Resolution
- Using a DataGridView to restrict user input based on a Strongly Typed Dataset
- Creating a windows based, handwritten data driven application
- Writing your own commands that fetch back identity values
- Specifying negative seed and increment values on the primary key to generate fake keys
- Replacing the fake keys with database generated keys during DataAdapter.update
3.6 Level 3 Recap |
: Level 4
- Transaction Basics
- What is a Transaction?
- Basic Characteristics of a Transaction.
4.1 Transactions in Database and Transactions through ADO.NET
- Writing two SqlCommands in a non-transactional code, comparing it to TSQL
- The SqlTransaction data type
- Wrapping those two commands inside a transaction using the SqlTransaction variable.
- Using Try-Catch blocks to write elegant transactional code.
- Best practices in writing Transactional Code
4.2 Transactions in disconnected data
- Using SqlTransaction with DataAdapters
- Fetching the last refresh of data, after having saved data using a DataAdapter
- The need for tying in all commands on a dataadapter on a SqlTransaction
- Various Scenarios in transactional updates using DataAdapters
- Using GetChanges and Merge to gracefully refresh data out of the database
- Specifying Schema information to a DataSet, so Merge works intelligently
- AcceptChangesOnUpdate
- Preserving RowStates in event of a failed transaction
- ContinueUpdateOnError
- Continue with further rows in event of a failed command
4.3 System.Transactions Theory
- Various options for distributed transactions
- Introduction to System.Transactions
- Important names
- Resource Managers and Transaction Coordinator
- Two phase commit basics
- Lightweight Transaction Manager versus MSDTC
- Enlistment Mechanisms
- Volatile, Durable and Promotable
4.4 System.Transactions Example
- Usage of TransactionScope
- Rolling back using System.Transactions
- Demonstrating promotion to MSDTC
- Isolation level increment on promotion of a transaction
4.5 Level 4 Recap |
: Level 5
- Comparing SQLCLR with TSQL
- Right usage of SQLCLR
- Comparing SQLCLR with extended stored procedures
5.1 Writing your first SQLCLR object – A UDF
- Leveraging Visual Studio to write SQLCLR objects
- Enabling SQLCLR Debugging on a server
- Writing a simple UDF in SQLCLR
- Debugging SQLCLR code
5.2 Writing a TVF
- Specifying FillRowMethodName and TableDefinition to a UDF
- Returning an IEnumerable for the table
- Seperating out a row's contents into column details, implementing the Fill Row Method
- Implementing the enumerator
- Pros and Cons of using inbuilt enumerators versus writing your own.
5.3 Interacting with the underlying database –Context Connections & Transactions
- An intro to Context connections
- Restrictions on Context Connections
- How many context connections can you open?
- Using SQLCLR code inside a transaction with other TSQL code
- Latching onto the current transaction using System.Transactions
- System.Transactions integration with SQLCLR
- Best practices for using SqlTransaction versus System.Transactions in SQLCLR code.
5.4 Course Recap
|
|