(B) Can you give an overview of ADO.NET architecture?
The most important section in ADO.NET architecture is "Data Provider". Data Provider provides access to data source (SQL SERVER, ACCESS, ORACLE).In short it provides object to achieve functionalities like opening and closing connection, retrieve data, and update data. In the below figure, you can see the four main sections of a data provider:-
- Connection
- Command object (This is the responsible object to use stored procedures)
- Data Adapter (This object acts as a bridge between data store and dataset)
- Data reader (This object reads data from data store in forward only mode).
- Dataset object represents disconnected and cached data. If you see the diagram, it is not in direct connection with the data store (SQL SERVER,
ORACLE etc) rather it talks with Data adapter, who is responsible for filling the dataset. Dataset can have one or more Data table and relations.
Figure: - 9.1 ADO.NET Architecture
- Data View" object is used to sort and filter data in Data table.
Note:- This is one of the favorite questions in .NET. Just paste the picture in your mind and during interview try to refer that image.
(B) What are the two fundamental objects in ADO.NET?
Data reader and Dataset are the two fundamental objects in ADO.NET.
(B) What is difference between dataset and data reader?
Following are some major differences between dataset and data reader:-
- Data Reader provides forward-only and read-only access to data, while the Dataset object can hold more than one table (in other words more than one row set) from the same data source as well as the relationships between them.
- Dataset is a disconnected architecture while data reader is connected architecture.
- Dataset can persist contents while data reader cannot persist contents, they are forward only.
(I) What are major difference between classic ADO and ADO.NET?
Following are some major differences between both :-
- In ADO we have recordset and in ADO.NET we have dataset.• In recordset we can only have one table. If we want to accommodate more than one tables we need to do inner join and fill the recordset. Dataset can have multiple tables.
- All data persist in XML as compared to classic ADO where data persisted in Binary format also.
(B) What is the use of connection object?
They are used to connect a data to a Command object.
- An OleDbConnection object is used with an OLE-DB provider
- A SqlConnection object uses Tabular Data Services (TDS) with MS SQL Server
(B) What is the use of command objects?
They are used to connect connection object to Data reader or dataset. Following are the methods provided by command object:-
- ExecuteNonQuery: -
Executes the command defined in the Command Text property against the connection defined in the Connection property for a query that does not return any row (an UPDATE, DELETE, or INSERT). Returns an Integer indicating the number of rows affected by the query.
- ExecuteReader: -
Executes the command defined in the Command Text property against the connection defined in the Connection property. Returns a "reader" object that is connected to the resulting row set within the database, allowing the rows to be retrieved.
- ExecuteScalar: -
Executes the command defined in the Command Text property against the connection defined in the Connection property. Returns only single value (effectively the first column of the first row of the resulting row set any other returned columns and rows are discarded. It is fast and efficient when only a "singleton" value is required
(B) What is the use of data adapter?
These objects connect one or more Command objects to a Dataset object. They provide logic that would get data from the data store and populates the tables in the Dataset, or pushes the changes in the Dataset back into the data store.
- An OleDbDataAdapter object is used with an OLE-DB provider
- A SqlDataAdapter object uses Tabular Data Services with MS SQL Server.
(B) What are basic methods of Data adapter?
There are three most commonly used methods of Data adapter:-
- Fill: -
Executes the Select Command to fill the Dataset object with data from the data source. It an also be used to update (refresh) an existing table in a Dataset with changes made to the data in the original data source if there is a primary key in the table in the Dataset.
- FillSchema :-
Uses the SelectCommand to extract just the schema for a table from the data source, and creates an empty table in the DataSet object with all the corresponding constraints.Update:- Calls the respective InsertCommand, UpdateCommand, or DeleteCommand for each inserted, updated,or deleted row in the DataSet so as to update the original data source with the changes made to the content of the DataSet. This is a little like the UpdateBatch method provided by the ADO Recordset object, but in the DataSet it can be used to update more than one table.
(B) What is Dataset object?
The Dataset provides the basis for disconnected storage and manipulation of relational data. We fill it from a data store, work with it while disconnected from that data store, then reconnect and flush changes back to the data store if required.
(B) What are the various objects in Dataset?
Dataset has a collection of Data Table object within the Tables collection. Each Data Table object contains a collection of Data Row objects and a collection of Data Column objects. There are also collections for the primary keys, constraints, and default values used in this table, which is called as constraint collection, and the parent and child relationships between the tables. Finally, there is a Default View object for each table. This is used to create a Data View object based on the table, so that the data can be searched, filtered, or otherwise manipulated while displaying the data.
Note: - Look back again to the main diagram for ADO.NET architecture for visualizing this answer in pictorial form.
(B) How can we connect to Microsoft Access, FoxPro, and Oracle etc?
Microsoft provides System.Data.OleDb namespace to communicate with databases like success , Oracle etc. In short, any OLE DB-Compliant database can be connected using System.Data.OldDb namespace.
Note:- Small sample of OLEDB is provided in "WindowsAppOleDb" which uses "Nwind.mdb" in bin directory to display data in Listbox.
Private Sub loadData()
Dim strPath As String
strPath = AppDomain.CurrentDomain.BaseDirectory
Dim objOLEDBCon As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & strPath & "Nwind.mdb")
Dim objOLEDBCommand As OleDbCommand
Dim objOLEDBReader As OleDbDataReader
Try
objOLEDBCommand = New OleDbCommand("Select FirstName from Employees")
objOLEDBCon.Open()
objOLEDBCommand.Connection = objOLEDBCon
objOLEDBReader = objOLEDBCommand.ExecuteReader()
Do While objOLEDBReader.Read()
lstNorthwinds.Items.Add(objOLEDBReader.GetString(0))
Loop
Catch ex As Exception
Throw ex
Finally
objOLEDBCon.Close()
End Try
End Sub
The main heart is the "Load data ()" method which actually loads the data in list box.
Note:- This source code has the connectionstring hard coded in the program itself which is not a good programming practice. For windows application the best place to store connectionstring is "App.config". Also note that "AppDomain.CurrentDomain.BaseDirectory" function gives the current path of the running exe which is "BIN" and the MDB file is in that directory. Also note that the final block which executes irrespective that there is error or not. Thus ensuring that all the connection to the datastore is freed. Its best practice to put all clean up statements in finally block thus ensuring that the resources are deallocated properly.
(B) How do we connect to SQL SERVER, which namespace do we use?
Below is the code, after the code we will try to understand the same in a more detailed manner. For this sample, we will also need a SQL Table setup, which I have imported, using the DTS wizard.
Private Sub LoadData()
' note :- with and end with makes your code more readable
Dim strConnectionString As String
Dim objConnection As New SqlConnection
Dim objCommand As New SqlCommand
Dim objReader As SqlDataReader
Try
' this gets the connectionstring from the app.config file.
' note if this gives error see where the MDB file is stored in your pc and point to thastrConnectionString = AppSettings.Item("ConnectionString")
' take the connectiostring and initialize the connection object
With objConnection
.ConnectionString = strConnectionString
.Open()
End With
objCommand = New SqlCommand("Select FirstName from Employees")
With objCommand
.Connection = objConnection
objReader = .ExecuteReader()
End With
' looping through the reader to fill the list box
Do While objReader.Read()
lstData.Items.Add(objReader.Item("FirstName"))
Loop
Catch ex As Exception
Throw ex
Finally
objConnection.Close()
End Try
End Sub
<appSettings>
<add key="Connectionstring" value="Server=ERMBOM1-IT2;User ID=sa;Database=Employees"/>
</appSettings>
Note:- The above code is provided in CD in folder WindowsAppSqlClient". Comments in the code do explain a lot but we will again iterate through the whole code later. "LoadData" is the main method which loads the data from SQL SERVER. Before running this code you have to install SQL SERVER in your machine. As we are dealing with SQLCLIENT we need to setup database in SQL SERVER. For this sample I have imported access "Nwind.mdb" in "SampleAccessDatabase" folder in CD in to SQlSERVER. Depending on computer you will also have to change the connectionstring in Web.config file.
For setting up the sample SQL table, we can use the DTS import wizard to import the table. See the below figure which is using data source as Microsoft Access. While importing the database author had, give the database name as "Employees".
Figure: - 9.2 Loading "Nwind.mdb" in SQL SERVER for the sample
Figure :- 9.3 Load only the Employee table.
To make it simple we will only import the employee table as that is the only thing needed in our sample code.
Figure: - 9.4 View of loaded Employee table
Now from interview point of view definitely you are not going to say the whole source code, which is given in the book. Interviewer expects only the broader answer of what are the steps needed to connect to SQL SERVER. For fundamental sake author has explained the whole source code. In short, you have to explain the "Load Data" method in broader way. Following are the steps to connect to SQL SERVER:-
-
First imports the namespace "System.Data.SqlClient".
-
Create a connection object as shown in "Load Data" method.
With objConnection
.ConnectionString = strConnectionString
.Open()
End With
-
Create the command object with the SQL. Also, assign the created connection object to command object and execute the reader.
objCommand = New SqlCommand("Select FirstName from Employees")
With objCommand
.Connection = objConnection
objReader = .ExecuteReader()
End With
-
Finally loop through the reader and fill the list box. If old VB programmers are expecting the move next command it is replaced by Read () which returns true if there is any data to be read. If the .Read () return is false that means that it's end of data reader and there is no more data to be read.
Do While objReader.Read()
lstData.Items.Add(objReader.Item("FirstName"))
Loop
-
Do not forget to close the connection object.