55
ADO.NET ADO.NET 3.1 The ADO and ADO.NET ActiveX Data Object (ADO) is developed based on Object Linking and Embedding (OLE) and Component Object Model (COM) technologies. For recent decade, ADO has been the preferred interface for Visual Basic programmers to access various data sources, with ADO 2.7 being the latest version of this technology. The development history of data accessing methods can be traced back to the mid-1990s with Data Access Object (DAO), and then followed by Remote Data Object (RDO), which was based on the Open Database Connectivity (ODBC). In the late 1990s, the ADO that is based on OLEDB is developed. ADO.NET is a new version of ADO and it is based mainly on the Microsoft .NET Framework. The underlying technology applied in ADO.NET is very different from the COM-based ADO. 03/14/22 1

Chapter 3 Introduction to ADO.NET 3.1 The ADO and ADO.NET ActiveX Data Object (ADO) is developed based on Object Linking and Embedding (OLE) and Component

Embed Size (px)

Citation preview

Chapter 3 Introduction to Chapter 3 Introduction to

ADO.NETADO.NET 3.1 The ADO and ADO.NET

ActiveX Data Object (ADO) is developed based on Object Linking and Embedding (OLE) and Component Object Model

(COM) technologies. For recent decade, ADO has been the preferred interface for Visual Basic programmers to access various data sources, with ADO 2.7 being the latest version of this technology.

The development history of data accessing methods can be traced back to the mid-1990s with Data Access Object

(DAO), and then followed by Remote Data Object (RDO), which was based on the Open Database Connectivity

(ODBC). In the late 1990s, the ADO that is based on OLEDB is developed.

ADO.NET is a new version of ADO and it is based mainly on the Microsoft .NET Framework. The underlying technology applied in ADO.NET is very different from the COM-based

ADO. 04/20/23 1

Chapter 3 Introduction to Chapter 3 Introduction to

ADO.NETADO.NETIn this chapter, you will:

 Learn the basic classes in ADO.NET and its architecture Learn the different ADO.NET Data Providers Learn about the Connection and Command

components Learn about the Parameters collection

component Learn about the DataAdapter and DataReader components Learn about the DataSet and DataTable

components04/20/23 2

3.23.2        Overview of the ADO.NETOverview of the ADO.NET

ADO.NET is a set of classes that expose data access services to the Microsoft .NET programmer. ADO.NET provides a rich set of components for creating distributed, data-sharing applications.

ADO.NET is an integral part of the Microsoft .NET Framework, providing access to relational, XML, and application data.

All ADO.NET classes are located at the System.Data namespace with two files named System.Data.dll and System.Xml.dll. When compiling code that uses the System.Data namespace, reference both System.Data.dll and System.Xml.dll.

Basically speaking, ADO.NET provides a set of classes to support you to develop database applications and enable you to connect to a data source to retrieve, manipulate and update data with your database.

04/20/23 3

Chapter 3 Introduction to Chapter 3 Introduction to

ADO.NETADO.NET The classes provided by ADO.NET are core to

develop a professional data-driven application and they can be divided into the following three major components:

• Data Provider• DataSet• DataTable These three components are located at the different

namespaces. The DataSet and the DataTable classes are located at the System.Data namespace. The classes of the Data Provider are located at the different namespaces based on the types of the Data Providers.

04/20/23 4

Chapter 3 Introduction to Chapter 3 Introduction to

ADO.NETADO.NET Data Provider contains four classes: Connection,

Command, DataAdapter and DataReader. These four classes can be used to perform the different functionalities to help you to:

• Set a connection between your project and the data source using the Connection object

• Execute data queries to retrieve, manipulate and update data using the Command object

• Move the data between your DataSet and your database using the DataAdapter object

• Perform data queries from the database (read-only) using the DataReader object

04/20/23 5

Chapter 3 Introduction to Chapter 3 Introduction to

ADO.NETADO.NET The DataSet class can be considered as a table container

and it can contain multiple data tables. These data tables are only a mapping to those real data tables in your database. But these data tables can also be used separately without connecting to the DataSet. In this case, each data table can be considered as a DataTable object.

The DataSet and DataTable classes have no direct relationship with the Data Provider class; therefore they are often called Data Provider-independent components.

Four classes such as Connection, Command, DataAdapter and DataReader that belong to Data Provider is often called Data Provider-dependent components.

04/20/23 6

3.33.3    The Architecture of The Architecture of

ADO.NETADO.NETThe ADO.NET architecture can be divided into two logical

pieces: command execution and caching.

• Command execution requires features like connectivity, execution, and reading of results. These features are enabled with ADO.NET Data Providers.

• Caching of results is handled by the DataSet.

04/20/23 7

  The Architecture of the The Architecture of the

ADO.NET ADO.NET

04/20/23 8

Figure 3-1. A typical architecture of the ADO.NET

Connection

Command

DataReader

DataSet Data Provider

Database

Transaction

Parameters

DataAdapter

DeleteCommand

SelectCommand

InsertCommand

UpdateCommand

DataTableCollection

ConstraintCollection

DataTable

DataRowCollection

DataColumnCollection

DataRelationCollection

Your Application

  The Architecture of the The Architecture of the

ADO.NET - 2ADO.NET - 2

04/20/23 9

Figure 3-2. Another architecture of the ADO.NET

Connection

DataAdapter

DataReader

Data Provider

Database

Transaction Command

ExecuteReader

Parameters

ExecuteNonQuery

ExecuteScalar

DataSet DataRelationCollection

ConstraintCollection

DataTable

DataRowCollection

DataColumnCollection

Your Application

3.4 The Components of 3.4 The Components of

ADO.NETADO.NET3.4.1 The Data Provider

The Data Provider can also be called a data driver and it can be used as a major component for your data-driven applications. The functionalities of the Data Provider, as its name means, are to:

• Connect your data source with your applications • Execute different methods to perform the associated

data query and data accessing operations between your data source and your applications

• Disconnect the data source when the data operations are done

04/20/23 10

3.4.1 The Data Provider3.4.1 The Data Provider The Data Provider is physically composed of a binary

library file and this library is in the DLL file format. Sometimes this DLL file depends on other DLL files, so in fact a Data Provider can be made up of several DLL files. Based on the different kinds of databases, Data Provider can have several versions and each version is matched to each kind of database. The popular versions of the Data Provider are:

Open DataBase Connectivity (Odbc) Data Provider (ODBC.NET)

Object Linking and Embeding DataBase (OleDb) Data Provider (OLEDB.NET)

SQL Server (Sql) Data Provider (SQL Server.NET) Oracle (Oracle) Data Provider (Oracle.NET)

04/20/23 11

3.4.1 The Data Provider3.4.1 The Data Provider The different data providers are located at the different

namespaces, and these namespaces hold the various data classes that you must import into your code in order to use those classes in your project.

Table 3-1 lists the most popular namespaces used by the different data providers and used by the DataSet and the DataTable.

04/20/23 12

Table 3-1. Namespaces for different Data Providers, DataSet and DataTable Namespaces Descriptions System.Data Holds the DataSet and DataTable classes System.Data.OleDb

Holds the class collection used to access an OLEDB data source System.Data.SqlClient

Holds the classes used to access an SQL Server 7.0 data source or later

System.Data.Odbc

Holds the class collection used to access an ODBC data source System.Data.OracleClient

Holds the classes used to access an Oracle data source

  

3.4.1.13.4.1.1      The ODBC Data ProviderThe ODBC Data Provider

The .NET Framework Data Provider for ODBC uses native ODBC Driver Manager (DM) through COM interlope to enable data access. The ODBC .NET data provider provides access to ODBC data sources with the help of native ODBC drivers in the same way that the OleDb .NET data provider accesses native OLE DB providers.

The ODBC.NET supports the following Data Providers:

• SQL Server • Microsoft ODBC for Oracle • Microsoft Access Driver (*.mdb)

04/20/23 13

  

3.4.1.23.4.1.2      The OLEDB Data Provider The OLEDB Data Provider

The System.Data.OleDb namespace holds all classes used by the .NET Framework Data Provider for OLE DB. The .NET Framework Data Provider for OLE DB describes a collection of classes used to access an OLE DB data source in the managed space. The OLE DB.NET data access technique supports the following Data Providers:

• Microsoft Access • SQL Server (7.0 or later) • Oracle (9i or later)

04/20/23 14

  

3.4.1.33.4.1.3      The SQL Server Data The SQL Server Data

ProviderProvider

This Data Provider provides access to a SQL Server version 7.0 or later database using its own internal protocol. The functionality of the data provider is designed to be similar to that of the .NET Framework data providers for OLE DB, ODBC, and Oracle. All classes related to this Data Provider are defined in a DLL file and is located at the System.Data.SqlClient namespace. Although Microsoft provides different Data Providers to access the data in SQL Server database, such as the ODBC and OLE DB, for the sake of optimal data operations, it is highly recommended to use this Data Provider to access the data in an SQL Server data source.

04/20/23 15

3.4.1.43.4.1.4      The Oracle Data The Oracle Data

ProviderProvider

This Data Provider is an add-on component to the .NET Framework that provides access to the Oracle database. All classes related to this Data Provider are located in the System.Data.OracleClient namespace. This provider relies upon Oracle Client Interfaces provided by the Oracle Client Software. You need to install the Oracle Client software on your computer to use this Data Provider.

Microsoft provides multiple ways to access the data stored in an Oracle database, such as Microsoft ODBC for Oracle and OLE DB, you should use this Data Provider to access the data in an Oracle data source since this one provides the most efficient way to access the Oracle database.

04/20/23 16

3.4.23.4.2      The Connection Class The Connection Class

Data Provider contains four sub-classes and the Connection component is one of them. This class provides a connection between your applications and the database you selected to connect to your project. To use this class to setup a connection between your application and the desired database, you need first to create an instance or an object based on this class.

The Connection object you want to use depends on

the type of the data source you selected. Data Provider provides four different Connection classes and each one is matched to one different database.

04/20/23 17

3.4.23.4.2      The Connection Class The Connection Class

Table 3-3 lists these popular Connection classes used for the different data sources:

04/20/23 18

Table 3-3. The Connection classes and databases Connection Class Associated Database OdbcConnection ODBC Data Source OleDbConnection OLE DB Database SqlConnection SQL Server Database OracleConnection Oracle Database

  

3.4.23.4.2      The Connection Class The Connection Class

The connection string is a property of the Connection class and it provides all necessary information to connect to your data source. Regularly this connection string contains a quite few parameters to define a connection, but only five of them are popularly utilized for most data-driven applications:

• Provider • Data Source• Database• User ID • Password

04/20/23 19

3.4.23.4.2      The Connection Class The Connection Class

A typical data connection instance with a general connection string can be expressed by the following codes:

 Connection = New xxxConnection(“Provider = MyProvider;” & _ “Data Source = MyServer;” & _

“Database = MyDatabase;” & _“User ID = MyUserID;” & _“Password = MyPassWord;”)

where xxx should be replaced by the selected Data

Provider in your real application, such as OleDb, Sql or Oracle. You need to use the real parameter values implemented in your applications to replace those nominal values such as MyServer, MyDatabase, MyUserID and MyPassWord in your application.

04/20/23 20

3.4.23.4.2      The Connection Class The Connection Class

The Provider parameter indicates the database driver you selected. If you installed a local SQL server and client such as the SQL Server 2005 Express on your computer, the Provider should be localhost. If you are using a remote SQL Server instance, you need to use that remote server’s network name. If you are using the default named instance of SQLX on your computer, you need to use .\SQLEXPRESS as the value for your Provider parameter. For the Oracle server database, you do not need to use this parameter.

The Data Source parameter indicates the name of the network

computer on which your SQL server or Oracle server is installed and running.

The Database parameter indicates your database name.

The User ID and Password parameters are used for the security issue for your database. In most cases, the default Windows NT Security Authentication is utilized.

04/20/23 21

3.4.23.4.2      The Connection Class The Connection Class

Some typical Connection instances are listed below: OLE DB Data Provider for Microsoft Access Database Connection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\database\CSE_DEPT.mdb;" & _

"User ID=MyUserID;" & _

"Password=MyPassWord;")  SQL Server Data Provider for SQL Server Database Connection = New SqlConnection("Server=localhost;" + _ "Data Source=Susan\SQLEXPRESS;" + _ "Database=CSE_DEPT;" + _

"Integrated Security=SSPI")  Oracle Data Provider for Oracle DatabaseConnection = New OracleConnection("Data Source=XE;" + _ "User ID=system;" + _ "Password=reback")

04/20/23 22

3.4.2.13.4.2.1      The Open() Method of the The Open() Method of the

Connection ClassConnection Class

To create a real connection between your database and your applications, the Open() method of the Connection class is called and it is used to open a connection to a data source with the property settings specified by the connection string.

An example of opening an OLEDB connection is shown in Figure 3-3.

04/20/23 23

Figure 3-3. An example coding of the opening a connection

Dim strConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\database\CSE_DEPT.mdb;" accConnection = New OleDbConnection(strConnectionString) Try accConnection.Open() Catch OleDbExceptionErr As OleDbException MessageBox.Show(OleDbExceptionErr.Message, "Access Error") Catch InvalidOperationExceptionErr As InvalidOperationException MessageBox.Show(InvalidOperationExceptionErr.Message, "Access Error") End Try If accConnection.State <> ConnectionState.Open Then MessageBox.Show("Database Connection is Failed") Exit Sub End If

3.4.2.23.4.2.2      The Close() Method of the The Close() Method of the

Connection ClassConnection Class

The Close() method is a partner of the Open() method and it is used to close a connection between your database and your applications when you finished your data operations to the data source. You should close any connection object you connected to your data source after you finished the data access to that data source, otherwise a possible error may be encountered when you try re-open that connection in the next time as you run your project.

Unlike the Open() method, which is a key to your data access and operation to your data source, the Close() method does not throw any exceptions when you try to close a connection that has already been closed. So you do not need to use a Try….Catch block to catch any error for this method.

04/20/23 24

3.4.2.33.4.2.3      The Dispose() Method of the The Dispose() Method of the

Connection ClassConnection Class

The Dispose() method of the Connection class is an overloaded method and it is used to releases the resources used by the Connection object. You need to call this method after the Close() method is executed to perform a cleanup job to release all resources used by the Connection object during your data access and operations to your data source.

After the Close() and Dispose() methods executed, you can release your reference to the Connection instance by setting it to Nothing. A piece of example code is shown in Figure 3-4.

04/20/23 25

Figure 3-4. An example coding for the cleanup of resources

' clean up the objects used accConnection.Close() accConnection.Dispose() accConnection = Nothing

3.4.3 The Command and the Parameter 3.4.3 The Command and the Parameter

ClassesClasses Command objects are used to execute commands against

your database such as a data query, an action query, and even a stored procedure. In fact, all data accesses and data operations between your data source and your applications are achieved by executing the Command object with a set of parameters.

Command class can be divided into the different categories and these categories are based on the different Data Providers. For the popular Data Providers, such as OLE DB, ODBC, SQL Server and Oracle, each one has its own Command class. Each Command class is identified by the different prefix such as OleDbCommand, OdbcCommand, SqlCommand and OracleCommand. Although these different Command objects belong to the different Data Providers, they have the similar properties and methods, and they are equivalent in functionalities.

04/20/23 26

3.4.3 The Command and the Parameter 3.4.3 The Command and the Parameter

ClassesClasses Depends on the architecture of the ADO.NET, the Command object

can have two different roles. Refer to Figures 3-1 and 3-2 in this chapter. In Figure 3-1, if a TableAdapter is utilized to perform a data query and all data tables are embedded into the DataSet as a data catching unit, the Command object is embedded into the different data query method of the TableAdapter, such as SelectCommand, InsertCommand, UpdateCommand and DeleteCommand and is executed based on the associated query type. In this case, the Command object can be executed indirectly, which means that you do not need to use any Executing method to run the Command object directly, instead you can run it by executing the associated method of the TableAdapter.

In Figure 3-2, each data table can be considered as an individual table. The Command object can be executed directly based on the attached parameter collection that is created and initialized by the user.

04/20/23 27

  

3.4.3.13.4.3.1      The Properties of the The Properties of the

Command ClassCommand Class

The Command class contains more than 10 properties, but only four of them are used popularly in most applications:

• Connection property • CommandType property • CommandText property • Parameters property

04/20/23 28

  

3.4.3.13.4.3.1      The Properties of the The Properties of the

Command ClassCommand Class

• Connection property holds a valid Connection object, and the Command object can be executed to access the connected database based on this Connection object.

• CommandType property indicates what kind of command that is stored in the CommandText property should be executed.

• CommandText property contains a complete SQL statement if the value of the CommandType property is Text.

• Parameters property holds a collection of the Parameter objects. You must first create and initialize a Parameter object before you can add that object to the Parameters collection for a Command object.

04/20/23 29

  

3.4.3.23.4.3.2      The Constructors and Properties of the The Constructors and Properties of the

Parameter Class Parameter Class

The Parameter class has four popular constructors, which are shown in Figure 3-5 (an SQL Server Data Provider is used as an example).

04/20/23 30

Dim sqlParameter As New SqlParameter() Dim sqlParameter As New SqlParameter(ParamName, objValue) Dim sqlParameter As New SqlParameter(ParamName, sqlDbType) Dim sqlParameter As New SqlParameter( ParamName, sqlDbType, intSize)

Table 3-4. The data types and the associated Data Provider Data Type Associated Data Provider OdbcType ODBC Data Provider OleDbType OLE DB Provider SqlDbType SQL Server Data Provider OracleType Oracle Data Provider

  

3.4.3.33.4.3.3      Parameter MappingParameter Mapping

When you add a Parameter object to the Parameters collection of a Command object, the Command object needs to know the relationship between that added parameter and the parameters you used in your SQL query string. Different parameter mappings are used for different Data Providers. Table 3-5 lists these mappings.

04/20/23 31

Table 3-5. The different parameter mappings Parameter Mapping Associated Data Provider Positional Parameter Mapping ODBC Data Provider Positional Parameter Mapping OLE DB Provider Named Parameter Mapping SQL Server Data Provider Named Parameter Mapping Oracle Data Provider

  

3.4.3.33.4.3.3      Parameter MappingParameter Mapping

Both OLE DB and ODBC Data Providers used a so-called Positional Parameter Mapping, which means that the relationship between the parameters defined in an SQL statement and the added parameters into a Parameters collection is one-to-one in the order. In other words, the order in which the parameters appear in an SQL statement and the order in which the parameters are added into the Parameters collection should be exactly identical. The Positional Parameter Mapping is indicated with a question mark ?.

Both SQL Server and Oracle Data Provider used the Named Parameter Mapping, which means that each parameter, either defined in an SQL statement or added into a Parameters collection, is identified by the name. In other words, the name of the parameter appeared in an SQL statement or a stored procedure must be identical with the name of the parameter you added into a Parameters collection.

04/20/23 32

  

3.4.3.43.4.3.4      The Methods of the The Methods of the

ParameterCollection Class ParameterCollection Class

To add Parameter objects to an Parameters collection of a Command object, two popular ways are generally adopted, Add() method and AddWithValue() method.

The Add() method is an overloaded method and it has five different protocols, but only two of them are widely used. The protocols of these two methods are shown below.

 ParameterCollection.Add( value As SqlParameter ) As SqlParameterParameterCollection.Add( paramName As String, Value As Object )

The AddWithValue() method is similar to the second Add() method with the following protocol:

 ParameterCollection.AddWithValue( paramName As String, Value As

Object )

04/20/23 33

  

3.4.3.53.4.3.5      The Constructor of the Command The Constructor of the Command

Class Class

The constructor of the Command class is an overloaded method and it has multiple protocols. Four popular protocols are listed in Figure 3-8 (an SQL Server Data Provider is used as an example).

04/20/23 34

Figure 3-8. Three popular protocols of the constructor of the Command class

Dim sqlCommand As New SqlCommand() Dim sqlCommand As New SqlCommand(connString) Dim sqlCommand As New SqlCommand(connString, SqlConnection) Dim sqlCommand As New SqlCommand(connString, SqlConnection, SqlTransaction)

  

3.4.3.63.4.3.6      The Methods of the Command The Methods of the Command

Class Class

The actual execution of a Command object is to run one of methods of the Command class to perform the associated data queries or data actions. Four popular methods are widely utilized for most data-driven applications and Table 3-6 lists these methods.

04/20/23 35

Table 3-6. Methods of the Command class Method Name Functionality ExecuteReader Executes commands that return rows, such

as a SQL SELECT statement. The returned rows are located in an OdbcDataReader, an OleDbDataReader, a SqlDataReader or an OracleDataReader, depending on which Data Provider you are using.

ExecuteScalar Retrieves a single value from the database. ExecuteNonQuery Executes a non-query command such as

SQL INSERT, DELETE, UPDATE, and SET statements.

ExecuteXmlReader (SqlCommand only) Similar to the ExecuteReader method, but the returned rows must be expressed using XML. This method is only available for the SQL Server Data Provider.

  

3.4.43.4.4      The DataAdapter ClassThe DataAdapter Class

The DataAdapter serves as a bridge between a DataSet and a data source for retrieving and saving data. The DataAdapter provides this bridge by mapping Fill, which changes the data in the DataSet to match the data in the data source, and Update, which changes the data in the data source to match the data in the DataSet.

The DataAdapter connects to your database using a Connection object and it uses Command objects to retrieve data from the database and populate those data to the DataSet and related classes such as DataTables, also the DataAdapter uses Command objects to send data from your DataSet to your database.

04/20/23 36

  

3.4.43.4.4      The DataAdapter ClassThe DataAdapter Class

To perform data query from your database to the DataSet, the DataAdapter uses the suitable Command objects and assign them to the appropriate DataAdapter properties such as SelectCommand, and execute that Command. To perform other data manipulations, the DataAdapter uses the same Command objects but assign them with different properties such as InsertCommand, UpdateCommand and DeleteCommand to complete the associated data operations.

The DataAdapter is a Data Provider-dependent component. This means that the DataAdapter has different versions based on the used Data Provider.

04/20/23 37

  

3.4.4.33.4.4.3      The Methods of the DataAdapter The Methods of the DataAdapter

Class Class

The DataAdapter has more than 10 methods available. Table 3-9 lists some most often used methods.

Among these methods, the Dispose, Fill, FillSchema and Update are most often used methods.

04/20/23 38

Table 3-9. The public methods of the DataAdapter class Methods Descriptions Dispose Releases the resources used by the DataAdapter. Fill Add or refreshe rows in the DataSet to match those in the

data source using the DataSet name, and creates a DataTable.

FillSchema Adds a DataTable to the specified DataSet. GetFillParameters Gets the parameters set by the user when executing an

SQL SELECT statement. ToString Returns a String containing the name of the Component, if

any. This method should not be overridden. Update Calls the respective INSERT, UPDATE, or DELETE

statements for each inserted, updated, or deleted row in the specified DataSet from a named DataTable.

  

An ExampleAn Example  the Fill Method of the the Fill Method of the

DataAdapter Class DataAdapter Class

04/20/23 39

Figure 3-13. An example of using the SqlDataAdapter to fill the DataSet

Dim cmdString As String = "SELECT name, office, title, college FROM Faculty" Dim sqlCommand As New SqlCommand Dim sqlDataAdapter As SqlDataAdapter Dim sqlDataSet As DataSet sqlCommand.Connection = sqlConnection sqlCommand.CommandType = CommandType.Text sqlCommand.CommandText = cmdString sqlDataAdapter = New SqlDataAdapter(cmdString, sqlConnection) sqldataAdapter.SelectCommand = sqlCommand sqlDataSet = New DataSet() sqlDataSet.Clear() Dim intValue As Integer = sqlDataAdapter.Fill(sqlDataSet) If intValue = 0 Then MessageBox.Show("No valid faculty found!") End If sqlDataSet.Dispose() sqlDataAdapter.Dispose() sqlCommand.Dispose() sqlCommand = Nothing

A B C D E F

  

3.4.53.4.5      The DataReader Class The DataReader Class

The DataReader class is a read-only class and it can only be used to retrieve and hold the data rows returned from a database executing an ExecuteReader method. This class provides a way of reading a forward-only stream of rows from a database. Depends on the Data Provider you are using, four popular DataReaders are provided by four Data Providers. They are OdbcDataReader, OleDbDataReader, SqlDataReader and OracleDataReader.

To create a DataReader instance, you must call the ExecuteReader method of the Command object, instead of directly using a constructor since the DataReader class does not have any public constructor.

04/20/23 40

  

The Properties of the DataReader Class The Properties of the DataReader Class

Table 3-11 lists most public properties of the SqlDataReader class. All other DataReader classes have the similar properties.

04/20/23 41

Table 3-11. Popular properties of the SqlDataReader class Property Name Value Type Functionality FieldCount Integer Gets the number of columns in the current row. HasRows Boolean Gets a value that indicates whether the

SqlDataReader contains one or more rows. IsClosed Boolean Retrieves a Boolean value that indicates whether the

specified SqlDataReader instance has been closed. Item(Int32) Native Gets the value of the specified column in its native

format given the column ordinal. Item(String) Native Gets the value of the specified column in its native

format given the column name. RecordsAffected Integer Gets the number of rows changed, inserted, or

deleted by execution of the Transact-SQL statement. VisibleFieldCount Integer Gets the number of fields in the SqlDataReader that

are not hidden.

  

The Methods of the DataReader Class The Methods of the DataReader Class

The DataReader class has more than 50 public methods. Table 3-12 lists the most useful methods of the SqlDataReader class. All other DataReader classes have the similar methods.

04/20/23 42

Table 3-12. Popular methods of the SqlDataReader class Method Name Functionality Close Closes the opened SqlDataReader object. Dispose Releases the resources used by the DbDataReader. GetByte Gets the value of the specified column as a byte. GetName Gets the name of the specified column. GetString Gets the value of the specified column as a string. GetValue Gets the value of the specified column in its native format. IsDBNull Gets a value that indicates whether the column contains non-

existent or missing values. NextResult Advances the data reader to the next result, when reading the

results of batch Transact-SQL statements. Read Advances the SqlDataReader to the next record. ToString Returns a String that represents the current Object.

  

An Example of the DataReader Class An Example of the DataReader Class

04/20/23 43

Figure 3-14. An example coding of using the SqlDataReader object

Dim cmdString As String = "SELECT name, office, title, college FROM Faculty" Dim sqlCommand As New SqlCommand Dim sqlDataReader As SqlDataReader sqlCommand.Connection = sqlConnection sqlCommand.CommandType = CommandType.Text sqlCommand.CommandText = cmdString sqlDataReader = sqlCommand.ExecuteReader If sqlDataReader.HasRows = True Then While FacultyReader.Read() For intIndex As Integer = 0 To FacultyReader.FieldCount - 1 FacultyLabel(intIndex).Text = FacultyReader.Item(intIndex).ToString Next intIndex End While Else MessageBox.Show("No matched faculty found!") End If sqlDataReader.Close() sqlDataReader = Nothing sqlCommand.Dispose() sqlCommand = Nothing

A B C D E

  

3.4.6 The DataSet Component 3.4.6 The DataSet Component

The DataSet, which is an in-memory cache of data retrieved from a database, is a major component of the ADO.NET architecture. The DataSet consists of a collection of DataTable objects that you can relate to each other with DataRelation objects. In other words, a DataSet object can be considered as a table-container that contains a set of data tables with the DataRelation as a bridge to relate all tables together.

• A DataSet class holds a data table collection, which contains a set of data tables or DataTable objects, and the Relations collection, which contains a set of DataRelation objects.

• A DataTable class holds the Rows collection, which contains a set of data rows or DataRow objects, and the Columns collection, which contains a set of data columns or DataColumn objects.

04/20/23 44

  

3.4.6 The DataSet Component - 2 3.4.6 The DataSet Component - 2

The definition of the DataSet class is a generic idea, which means that it is not tied to any specific type of database. Data can be loaded into a DataSet by using a TableAdapter from many different databases such as Microsoft Access, Microsoft SQL Server, Oracle, Microsoft Exchange, Microsoft Active Directory, or any OLE DB or ODBC compliant database.

Although not tied to any specific database, the DataSet class is designed to contain relational tabular data as one would find in a relational database.

04/20/23 45

  

The DataSet Component and other Data The DataSet Component and other Data

ObjectsObjects

Figure 3-15 shows a global relationship between the DataSet object, other data objects and the Visual Basic 2005 application.

04/20/23 46

Figure 3-15. A global representation of the DataSet and other data objects

DataTable

DataSet

DataTable

DataTable

DataTable TableAdapter

Database

DataTable

BindingSource

...

TableAdapter

BindingNavigator

...

DataTable

DataGridView

VB Form Window

  

An Example of The DataSet Component An Example of The DataSet Component

04/20/23 47

Figure 3-16. An example of using the DataSet

Dim cmdString As String = "SELECT name, office, title, college FROM Faculty" Dim sqlCommand As New SqlCommand Dim sqlDataAdapter As SqlDataAdapter Dim sqlDataSet As DataSet Dim intValue As Integer sqlCommand.Connection = sqlConnection sqlCommand.CommandType = CommandType.Text sqlCommand.CommandText = cmdString sqlDataAdapter.SelectCommand = sqlCommand sqlDataSet = New DataSet() sqlDataSet.Clear() intValue = sqlDataAdapter.Fill(sqlDataSet) If intValue = 0 Then MessageBox.Show("No valid faculty found!") End If sqlDataSet.Dispose() sqlDataAdapter.Dispose() sqlCommand.Dispose() sqlCommand = Nothing

A B C D E

  

3.4.73.4.7      The DataTable ComponentThe DataTable Component

DataTable class can be considered as a container that holds the Rows and Columns collections, and the Rows and Columns collections contain a set of rows (or DataRow objects) and a set of columns (or DataColumn objects) from a data table in a database.

The DataTable is a directly mapping to a real data table in a database or a data source and it store its data in a mapping area, or a block of memory space that is associated to a data table in a database as your project runs.

The DataTable class is located in the System.Data namespace and it is a Data Provider independent component, which means that only one set of DataTable objects are existed no matter what kind of Data Provider you are using in your applications.

04/20/23 48

  

3.4.73.4.7      The DataTable Component - 2The DataTable Component - 2

When accessing DataTable objects, note that they are conditionally case sensitive. For example, if one DataTable is named "faculty" and another is named "Faculty", a string used to search for one of the tables is regarded as case sensitive. However, if "faculty" exists and "Faculty" does not, the search string is regarded as case insensitive. A DataSet can contain two DataTable objects that have the same TableName property value but different Namespace property values.

If you are creating a DataTable programmatically, you must first define its schema by adding DataColumn objects to the DataColumnCollection (accessed through the Columns property). To add rows to a DataTable, you must first use the NewRow method to return a new DataRow object.

04/20/23 49

  

3.4.7.13.4.7.1      The DataTable ConstructorThe DataTable Constructor

The DataTable has four overloaded constructors and Table 3-18 lists three most often used constructors.

04/20/23 50

Table 3-18. Three popular constructors of the DataTable class Constructors Descriptions DataTable() Initializes a new instance of the DataTable class with no

arguments. DataTable(String) Initializes a new instance of the DataTable class with the

specified table name. DataTable(String, String) Initializes a new instance of the DataTable class using the

specified table name and namespace.

  

An Example of The DataTable An Example of The DataTable

04/20/23 51

Figure 3-18. An example of creating a new table and adding data into the table

'Create a new DataTable Dim FacultyTable As DataTable = New DataTable("FacultyTable") 'Declare DataColumn and DataRow variables Dim column As DataColumn Dim row As DataRow 'Create new DataColumn, set DataType, ColumnName and add to DataTable column = New DataColumn column.DataType = System.Type.GetType("System.Int32") column.ColumnName = "FacultyId" FacultyTable.Columns.Add(column) 'Create another column. column = New DataColumn column.DataType = Type.GetType("System.String") column.ColumnName = "FacultyOffice" FacultyTable.Columns.Add(column) 'Create new DataRow objects and add to DataTable. Dim Index As Integer For Index = 1 To 10 row = FacultyTable.NewRow row("FacultyId") = Index row("FacultyOffice") = "TC- " & Index FacultyTable.Rows.Add(row) Next Index

A B C D E F

  

3.53.5      Chapter SummaryChapter Summary

The main topic of this chapter is an introduction to the ADO.NET, which includes the architectures, organizations and components of the ADO.NET.

Fundamentally the ADO.NET is a class container and it contains three basic components: Data Provider, DataSet and DataTable. Furthermore, the Data Provider contains four sub-components: Connection, Command, TableAdapter and DataReader.

All four sub-components of the Data Provider are called Data Provider-dependent components. The popular versions of the Data Provider are:

          OLE DB Data Provider         ODBC Data Provider         Microsoft SQL Server Data Provider         Oracle Data Provider

04/20/23 52

  

3.53.5      Chapter Summary - 2Chapter Summary - 2

By finishing this chapter, you should be able to:

• Understand the architecture and organization of the ADO.NET• Understand three components of the ADO.NET, such as the

Data Provider, DataSet and the DataTable• Use the Connection object to connect to an Microsoft Access,

Microsoft SQL Server and Oracle database• Use the Command and Parameter objects to select, insert and

delete data using a string variable containing a SQL statement

• Use the DataAdapter object to fill a DataSet using the Fill method

• Read data from the data source using the DataReader object • Read data from the DataTable using the SelectCommand

property of the DataAdapter object• Create DataSet and DataTable objects and add data into the

DataTable object

04/20/23 53

  

HomeworkHomework

• True/False Questions:• Multiple Choices:• Exercises:

04/20/23 54

  

Questions and Answers……Questions and Answers……

04/20/23 55