What is Microsoft ADO.NET?
Visual Studio .NET provides access to databases through the set of tools and
namespaces collectively referred to as Microsoft ADO.NET
What are the 3 major types of connection objects in ADO.NET?
OleDbConnection object : Use an OleDbConnection object to connect to a
Microsoft Access or third-party database, such as MySQL. OLE database connections
use the OleDbDataAdapter object to perform commands and return data.
SqlConnection object : Use a SqlConnection object to connect to a Microsoft SQL
Server database. SQL database connections use the SqlDataAdapter object to
perform commands and return data.
OracleConnection object : Use an OracleConnection object to connect to Oracle
databases. Oracle database connections use the OracleDataAdapter object to
perform commands and return data. This connection object was introduced in
Microsoft .NET Framework version 1.1.
List the 4 common ADO.NET Namespaces?
System.Data : Contains Classes, types, and services for creating and accessing
data sets and their subordinate objects
System.Data.SqlClient : Contains Classes and types for accessing Microsoft SQL
Server databases
System.Data.OracleClient : Contains Classes and types for accessing Oracle
databases (Microsoft .NET Framework version 1.1 and later)
System.Data.OleDb : Contains Classes and types for accessing other databases
List all the steps in order, to access a database through ADO.NET?
1. Create a connection to the database using a connection object.
2. Invoke a command to create a DataSet object using an adapter object.
3. Use the DataSet object in code to display data or to change items in the
database.
4. Invoke a command to update the database from the DataSet object using an
adapter object.
5. Close the database connection if you explicitly opened it in step 2 using the Open
method. Invoking commands without first invoking the Open method implicitly
opens and closes the connection with each request.
Why will you usually create an ASPNET user account in the Database for an
ASP.NET web application?
Web applications run using the ASPNET user account. The SQL database
administrator will have to set up this account and grant it permissions before your
Web application will have access to a SQL database. For file-based databases, such
as Microsoft Access, you must grant permissions on the database file to the ASPNET
user account using Windows file security settings.
What is the difference between DataReader and DataAdapter?
1. Data Reader is read only forward only and much faster than DataAdapter.
2. If you use DataReader you have to open and close connection explicitly where as
if you use DataAdapter the connection is automatically opened and closed.
3. DataReader is connection oriented where as Data Adapter is disconnected
Can you inherit from SqlConnection Class?
No, you cannot inheirt from SqlConnection Class. SqlConnection Class is a sealed
class. It is a compile time error.
Will the connection be closed, if the SqlConnection object goes out of
scope?
No, If the SqlConnection goes out of scope, it won't be closed. Therefore, you must
explicitly close the connection by calling Close or Dispose.
What happens if connection pooling is enabled?
If connection pooling is enabled and when you call Close or Dispose methods, then
the connection is returned to the connection pool. This connection can then be
resused.If connection pooling is disabled and when you call Close or Dispose
methods, the underlying connection to the server is actually closed.
How do you ensure that the database connections are always closed?
To ensure that the database connections are always closed, open the connection
inside of a using block, as shown in the following code fragment. Doing so ensures
that the connection is automatically closed when the code exits the block.
using (SqlConnection ConnectionObject = new SqlConnection())
{
ConnectionObject.Open();
//The database connection will be closed when the control exits the using code
block
}
How do you read an XML file into a DataSet?
Using the DataSet objects ReadXML method.
When do you use ExecuteReader, ExecuteNonQuery, ExecuteScalar
methods?
If the command or stored procedure that is being executed returns a set of rows,
then we use ExecuteReader method.
If the command or stored procedure that is being executed returns a single value
then we use ExecuteScalar method.
If the command or stored procedure performs INSERT, DELETE or UPDATE
operations, then we use ExecuteNonQuery method. ExecuteNonQuery method
returns an integer specifying the number of rows inserted, deleted or updated.
Can your class inherit from SqlCommand Class?
No, you cannot inheirt from SqlCommand Class. SqlCommand Class is a sealed
class. It is a compile time error.
Give an example that shows how to execute a stored procedure in
ADO.NET?
using (SqlConnection ConnectionObject = new SqlConnection())
{
//Specify the name of the stored procedure to execute and the Connection Object
to use
SqlCommand CommandObject = new SqlCommand("StoredProcedureName",
ConnectionObject);
//Specify the SQL Command type is a stored procedure
CommandObject.CommandType = CommandType.StoredProcedure;
//Open the connection
ConnectionObject.Open();
//Execute the Stored Procedure
int RecordsAffected = CommandObject.ExecuteNonQuery();
}
Can you reuse a SqlCommand object?
Yes, you can reset the CommandText property and reuse the SqlCommand object.
What are the methods that can ensure asynchronous execution of the
Transact-SQL statement or stored procedure?
BeginExecuteNonQuery
BeginExecuteReader
What is SqlCommand.CommandTimeout Property used for?
CommandTimeout Property is used to Get or set the wait time before terminating
the attempt to execute a command and generating an error.
//Specify the CommandTimeout property value
SqlCommand CommandObject = new SqlCommand("StoredProcedureName",
ConnectionObject);
//Wait for 10 seconds to execute the Stored procedure
CommandObject.CommandTimeout = 10;
The time is in seconds. The default is 30 seconds.
How do you create an instance of SqlDataReader class?
To create an instance of SqlDataReader class, you must call the ExecuteReader
method of the SqlCommand object, instead of directly using a constructor.
//Error! Cannot use SqlDataReader() constructor
//to create an instance of SqlDataReader class
SqlDataReader ReaderObject = new SqlDataReader();
//Call the ExecuteReader method of the SqlCommand object
SqlCommand CommandObject = new SqlCommand();
SqlDataReader ReaderObject = CommandObject.ExecuteReader();
Creating an instance of SqlDataReader class using SqlDataReader() constructor
generates a compile time error - The type 'System.Data.SqlClient.SqlDataReader'
has no constructors defined.
How do you programatically check if a specified SqlDataReader instance
has been closed?
Use the IsClosed property of SqlDataReader to check if a specified SqlDataReader
instance has been closed. If IsClosed property returns true, the SqlDataReader
instance has been closed else not closed.
How do you get the total number of columns in the current row of a
SqlDataReader instance?
FieldCount property can be used to get the total number of columns in the current
row of a SqlDataReader instance.
What is the use of SqlParameter.Direction Property?
SqlParameter.Direction Property is used to specify the Sql Parameter type - inputonly, output-only, bidirectional, or a stored procedure return value parameter. The
default is Input.
How do you retrieve two tables of data at the same time by using data
reader?
Include 2 select statements either in a stored procedure or in a select command
and call the ExecuteReader() method on the command object. This will
automatically fill the DataReader with 2 Tables of data.
The datareader will always return the data from first table only. If you want to get
the second table then you need to use ReaderObject.NextResult() method. The
NextResult() method will return true if there is another table. The following code
shows you how do it.
//Create the SQL Query with 2 Select statements
string SQLQuery = "Select * from Customers;Select * from Employees;";
//Create the Connection Object
SqlConnection ConnectionObject = new SqlConnection(ConnectionString);
//Create the Command Object
SqlCommand CommandObject = new SqlCommand(SQLQuery, ConnectionObject);
//Open the connection
ConnectionObject.Open();
//Execute the command. Now reader object will have 2 tables of data.
SqlDataReader ReaderObject = CommandObject.ExecuteReader();
//Loop thru the tables in the DataReader object
while (ReaderObject.NextResult())
{
while (ReaderObject.Read())
{
//Do Something
}
}
//Close the Reader
ReaderObject.Close();
//Close the Connection
ConnectionObject.Close();
What are the advantages of using SQL stored procedures instead of adhoc
SQL queries in an ASP.NET web application?
Better Performance : As stored procedures are precompiled objects they execute
faster than SQL queries. Every time we run a SQL query, the query has to be first
compiled and then executed where as a stored procedure is already compiled.
Hence executing stored procedures is much faster than executing SQL queries.
Better Security: For a given stored procedure you can specify who has the rights
to execute. You cannot do the same for an SQL query. Writing the SQL statements
inside our code is usually not a good idea. In this way you expose your database
schema (design) in the code which may be changed. Hence most of the time
programmers use stored procedures instead of plain SQL statements.
Reduced Network Traffic : Stored Procedures reside on the database server. If
you have to execute a Stored Procedure from your ASP.NET web application you
just specify the name of the Stored Procedure. So over the network you just send
the name of the Stored Procedure. With an SQL query you have to send all the SQL
statements over the network to the database server which could lead to increased
network traffic.
Can you update the database using DataReader object?
No, You cannot update the database using DataReader object. DataReader is readonly, foward only. It reads one record at atime. After DataReader finishes reading
the current record, it moves to the next record. There is no way you can go back to
the previous record.
What is the difference between a DataReader and a DataSet?
DataReader
1. DatReader works on a Connection oriented architecture.
2. DataReader is read only, forward only. It reads one record at atime. After
DataReader finishes reading the current record, it moves to the next record. There
is no way you can go back to the previous record. So using a DataReader you read
in forward direction only.
3. Updations are not possible with DataReader.
4. As DataReader is read only, forward only it is much faster than a DataSet.
DataSet
1. DataSet works on disconnected architecture.
2. Using a DataSet you can move in both directions. DataSet is bi directional.
3. Database can be updated from a DataSet.
4. DataSet is slower than DataReader.
Give an example scenario of using a DataSet and a DataReader?
If you want to just read and display the data(No updates, deletes, or inserts) then
use a DataReader.
If you want to do a batch inserts, updates and deletes then use a DataSet.
(B)What is the namespace in which .NET has the data
functionality classes ? Following are the namespaces provided by .NET
for data management :- System.data This contains the basic objects used for
accessing and storing relational data, such as DataSet,DataTable, and
DataRelation. Each of these is independent of the type of data source and the
way we connect to it. System.Data.OleDB It contains the objects that we use
to connect to a data source via an OLE-DB provider, such as OleDbConnection,
OleDbCommand, etc. These objects inherit from the common base classes, and
so have the same properties, methods, and events as the SqlClient equivalents.
System.Data.SqlClient: This contains the objects that we use to connect to a
data source via the Tabular Data Stream (TDS) interface of Microsoft SQL
Server (only). This can generally provide better performance as it removes
some of the intermediate layers required by an OLE-DB connection.
System.XML This Contains the basic objects required to create, read, store,
write, and manipulate XML documents according to W3C recommendations.
(B) Can you give a overview of ADO.NET architecture ? The
most important section in ADO.NET architecture is Data Provider. Data
Provider provides access to datasource (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.
9.
ADO.NET253 Command object (This is the responsible object to use
stored procedures) Data Adapter (This object acts as a bridge between
datastore and dataset). Datareader (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 Datatable and relations. Figure :9.1 ADO.NET Architecture254 DataView object is used to sort and filter data in
Datatable. 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 ?
Datareader and Dataset are the two fundamental objects in ADO.NET.
(B)What is difference between dataset and datareader ?
Following are some major differences between dataset and datareader :-
DataReader 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
rowset) from the same data source as well as the relationships between them.
Dataset is a disconnected architecture while datareader is connected
architecture. Dataset can persist contents while datareader can not persist
contents, they are forward only.
(I)What are major difference between classic ADO and
ADO.NET ?
Following are some major differences between both As in classic ADO we had
client and server side cursors they are no more present in ADO.NET. Note it's a
disconnected model so they are no more applicable. Locking is not supported
due to disconnected model. 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 provider255 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 Datareader or dataset. Following
are the methods provided by command object :- ExecuteNonQuery :Executes the command defined in the CommandText 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 CommandText property against the connection defined
in the Connection property. Returns a "reader" object that is connected to the
resulting rowset within the database, allowing the rows to be retrieved.
ExecuteScalar :- Executes the command defined in the CommandText property
against the connection defined in the Connection property. Returns only single
value (effectively the first column of the first row of the resulting rowset) 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 dataadapter ?
These are objects that 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 Dataadapter ?
There are three most commonly used methods of Dataadapter :- Fill :- Executes
the SelectCommand 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 datasource if there is a primary key in the table
in the DataSet.256 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 DataTable object within the Tables collection. Each
DataTable object contains a collection of DataRow objects and a collection of
DataColumn 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 DefaultView object for each table. This is used to create a DataView
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 ,
Oracle etc ?
Microsoft provides System.Data.OleDb namespace to communicate with
databases like scess , 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()257 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 Loaddata()
method which actually loads the data in listbox. 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 I have given the explanation for it. For this
sample we will also need a SQL Table setup which I have imported using the
DTS wizard.258 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 that strConnectionString =
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 <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 dealing259 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 sample260 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.261 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 LoadData method in broader way. Following are the steps
to connect to SQL SERVER :- First import the namespace
System.Data.SqlClient. Create a connection object as shown in LoadData
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.262 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 movenext
command its replaced by Read() which returns true if there is any data to be
read. If the .Read() returns false that means that its end of datareader 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. Note:- In LoadData you will see that connectionstring is
stored in Web.config file and is loaded using
AppSettings.Item(ConnectionString). While running this sample live on
your database do not forget to change this connectionstring accordingly to
your machine name and SQL SERVER or else the source code will not run.
(B) How do we use stored procedure in ADO.NET and how
do we provide parameters to the stored procedures?
ADO.NET provides the SqlCommand object which provides the functionality of
executing stored procedures. Note :- Sample code is provided in folder
WindowsSqlClientCommand. There are two stored procedures created in
same database Employees which was created for the previous question.
CREATE PROCEDURE SelectByEmployee @FirstName nvarchar(200) AS
Select FirstName from Employees where FirstName like @FirstName + '%'
CREATE PROCEDURE SelectEmployee AS Select FirstName from Employees If
txtEmployeeName.Text.Length = 0 Then objCommand = New
SqlCommand(SelectEmployee) Else objCommand = New
SqlCommand(SelectByEmployee)263 objCommand.Parameters.Add(@FirstName,
Data.SqlDbType.NVarChar, 200) objCommand.Parameters.Item(@FirstName).Value =
txtEmployeeName.Text.Trim() End If In the above sample not much has been
changed only that the SQL is moved to the stored procedures. There are two
stored procedures one is SelectEmployee which selects all the employees and
the other is SelectByEmployee which returns employee name starting with a
specific character. As you can see to provide parameters to the stored
procedures we are using the parameter object of the command object. In such
question interviewer expects two simple answers one is that we use command
object to execute stored procedures and the parameter object to provide
parameter to the stored procedure. Above sample is provided only for getting
the actual feel of it. Be short be nice and get a job.
(B) How can we force the connection object to close after
my datareader is closed ?
Command method Executereader takes a parameter called as
CommandBehavior where in we can specify saying close connection
automatically after the Datareader is close. pobjDataReader =
pobjCommand.ExecuteReader(CommandBehavior.CloseConnection)
(B) I want to force the datareader to return only schema of
the datastore rather than data ?
pobjDataReader =
pobjCommand.ExecuteReader(CommandBehavior.SchemaOnly)
(B) How can we fine tune the command object when we
are expecting a single row ?
Again CommandBehaviour enumeration provides two values SingleResult and
SingleRow. If you are expecting a single value then pass
CommandBehaviour.SingleResult and the query is optimized accordingly, if
you are expecting single row then pass CommandBehaviour.SingleRow and
query is optimized according to single row.
(B) Which is the best place to store connectionstring in
.NET projects ?
264 Config files are the best places to store connectionstrings. If it is a web-
based application Web.config file will be used and if it is a windows
application App.config files will be used.
(B) What are the steps involved to fill a dataset ?
Twist :- How can we use dataadapter to fill a dataset ? Sample code is provided
in WindowsDataSetSample folder in CD.LoadData has all the
implementation of connecting and loading to dataset. This dataset is finally
bind to a ListBox. Below is the sample code. Private Sub LoadData() Dim
strConnectionString As String strConnectionString = AppSettings.Item(ConnectionString)
Dim objConn As New SqlConnection(strConnectionString) objConn.Open() Dim objCommand
As New SqlCommand(Select FirstName from Employees) objCommand.Connection =
objConn Dim objDataAdapter As New SqlDataAdapter() objDataAdapter.SelectCommand =
objCommand Dim objDataSet As New DataSet End Sub In such type of questions
interviewer is looking from practical angle, that have you worked with dataset
and datadapters. Let me try to explain the above code first and then we move
to what steps should be told during interview. Dim objConn As New
SqlConnection(strConnectionString) objConn.Open() First step is to open the
connection.Again note the connection string is loaded from config file. Dim
objCommand As New SqlCommand(Select FirstName from Employees)
objCommand.Connection = objConn Second step is to create a command object
with appropriate SQL and set the connection object to this command. Dim
objDataAdapter As New SqlDataAdapter()265 objDataAdapter.SelectCommand
= objCommand Third steps is to create the Adapter object and pass the
command object to the adapter object. objDataAdapter.Fill(objDataSet) Fourth
step is to load the dataset using the Fill method of the dataadapter.
lstData.DataSource = objDataSet.Tables(0).DefaultView
lstData.DisplayMember = FirstName lstData.ValueMember = FirstName
Fifth step is to bind to the loaded dataset with the GUI. At this moment sample
has listbox as the UI. Binding of the UI is done by using DefaultView of the
dataset. Just to revise every dataset has tables and every table has views. In
this sample we have only loaded one table i.e. Employees table so we are
referring that with an index of zero. Just say all the five steps during interview
and you will see the smile on the interviewers face and appointment letter in
your hand.
(B)What are the various methods provided by the dataset
object to generate XML?
Note:- XML is one of the most important leap between classic ADO and
ADO.NET. So this question is normally asked more generally how can we
convert any data to XML format. Best answer is convert in to dataset and use
the below methods. ReadXML Reads a XML document in to Dataset.
GetXML This is a function which returns the string containing XML document.
WriteXML This writes a XML data to disk.
(B) How can we save all data from dataset ?
266 Dataset has AcceptChanges method which commits all the changes since
last time Acceptchanges has been executed. Note :- This book does not have
any sample of Acceptchanges. I leave that to readers as homework sample. But
yes from interview aspect that will be enough.
(B) How can we check that some changes have been made
to dataset since it was loaded ?
Twist :- How can we cancel all changes done in dataset ? Twist :- How do we
get values which are changed in a dataset ? For tracking down changes Dataset
has two methods which comes as rescue GetChanges and HasChanges.
GetChanges Returns dataset which are changed since it was loaded or since
Acceptchanges was executed. HasChanges This property indicates that has
any changes been made since the dataset was loaded or acceptchanges method
was executed. If we want to revert or abandon all changes since the dataset
was loaded use RejectChanges. Note:- One of the most misunderstood things
about these properties is that it tracks the changes of actual database. That is
a fundamental mistake; actually the changes are related to only changes with
dataset and have nothing to with changes happening in actual database. As
dataset are disconnected and do not know anything about the changes
happening in actual database.
(B) How can we add/remove rows in DataTable object
of DataSet ?
267 Datatable provides NewRow method to add new row to DataTable.
DataTable has DataRowCollection object which has all rows in a
DataTable object. Following are the methods provided by
DataRowCollection object :- Add Adds a new row in DataTable Remove It
removes a DataRow object from DataTable RemoveAt It removes a
DataRow object from DataTable depending on index position of the
DataTable.
(B) What is basic use of DataView ?
DataView represents a complete table or can be small section of rows
depending on some criteria. It is best used for sorting and finding data with in
datatable. Dataview has the following methods :- Find It takes a array of
values and returns the index of the row. FindRow This also takes array of
values but returns a collection of DataRow.268 If we want to manipulate data
of DataTable object create DataView (Using the DefaultView we can
create DataView object) of the DataTable object and use the following
functionalities :- AddNew Adds a new row to the DataView object. Delete
Deletes the specified row from DataView object.
(B) What is the difference between DataSet and
DataReader ?
Twist :- Why is DataSet slower than DataReader ? Fourth point is the answer to
the twist. Note:- This is my best question and I expect everyone to answer it. It
is asked almost 99% in all companies....Basic very Basic cram it. Following are
the major differences between DataSet and DataReader :- DataSet is a
disconnected architecture, while DataReader has live connection while
reading data. If we want to cache data and pass to a different tier DataSet
forms the best choice and it has decent XML support. When application
needs to access data from more than one table DataSet forms the best
choice. If we need to move back while reading records, datareader does not
support this functionality. But one of the biggest drawbacks of DataSet is
speed. As DataSet carry considerable overhead because of relations, multiple
tables etc speed is slower than DataReader. Always try to use DataReader
wherever possible, as its meant specially for speed performance.
(B) How can we load multiple tables in a DataSet ?
objCommand.CommandText = "Table1"269 objDataAdapter.Fill(objDataSet,
"Table1") objCommand.CommandText = "Table2"
objDataAdapter.Fill(objDataSet, "Table2") Above is a sample code which shows
how to load multiple DataTable objects in one DataSet object. Sample code
shows two tables Table1 and Table2 in object ObjDataSet.
lstdata.DataSource = objDataSet.Tables("Table1").DefaultView In order to refer
Table1 DataTable, use Tables collection of DataSet and the Defaultview object
will give you the necessary output.
(B) How can we add relations between table in a
DataSet ?
Dim objRelation As DataRelation objRelation=New
DataRelation("CustomerAddresses",objDataSet.Tables("Customer").Columns("
Custid") ,objDataSet.Tables("Addresses").Columns("Custid_fk"))
objDataSet.Relations.Add(objRelation) Relations can be added between
DataTable objects using the DataRelation object. Above sample code is
trying to build a relationship between Customer and Addresses Datatable
using CustomerAddresses DataRelation object.
(B) What is the use of CommandBuilder ?
CommandBuilder builds Parameter objects automatically. Below is a simple
code which uses commandbuilder to load its parameter objects. Dim
pobjCommandBuilder As New OleDbCommandBuilder(pobjDataAdapter)
pobjCommandBuilder.DeriveParameters(pobjCommand) Be careful while using
DeriveParameters method as it needs an extra trip to the Datastore which
can be very inefficient.270
(B) Whats difference between Optimistic and
Pessimistic locking ?
In pessimistic locking when user wants to update data it locks the record and
till then no one can update data. Other users can only view the data when
there is pessimistic locking. In optimistic locking multiple users can open the
same record for updating, thus increase maximum concurrency. Record is only
locked when updating the record. This is the most preferred way of locking
practically. Now a days browser based application is very common and having
pessimistic locking is not a practical solution.
(A)
How many ways are there to implement locking
in ADO.NET ?
(B)
Following are the ways to implement locking using ADO.NET :-
When we call Update method of DataAdapter it handles locking
internally. If the DataSet values are not matching with current data in
Database it raises concurrency exception error. We can easily trap this
error using Try..Catch block and raise appropriate error message to the
user. Define a Datetime stamp field in the table.When actually you are
firing the UPDATE SQL statements compare the current timestamp with
one existing in the database. Below is a sample SQL which checks for
timestamp before updating and any mismatch in timestamp it will not
update the records. This is the best practice used by industries for
locking. Update table1 set field1=@test where
LastTimeStamp=@CurrentTimeStamp Check for original values stored
in SQL SERVER and actual changed values. In stored procedure check
before updating that the old data is same as the current. Example in the
below shown SQL before updating field1 we check that is the old field1
value same. If not then some one else has updated and necessary action
has to be taken. Update table1 set field1=@test where field1 =
@oldfield1value Locking can be handled at ADO.NET side or at SQL
SERVER side i.e. in stored procedures. For more details of how to
implementing locking in SQL SERVER read What are different locks in
SQL SERVER ? in SQL SERVER chapter.271 Note:- This is one of the
favorite questions of interviewer, so cram it....When I say cram itI do not
mean it.... I mean understand it. This book has tried to cover ADO.NET
as much as possible, but indeterminist nature of ADO.NET interview
questions makes it difficult to make full justice. But hope so that the
above questions will make you quiet confident during interviews.
(C)
(A)How can we perform transactions in .NET?
(D)
The most common sequence of steps that would be performed
while developing a transactional application is as follows: Open a
database connection using the Open method of the connection object.
Begin a transaction using the Begin Transaction method of the
connection object. This method provides us with a transaction object
that we will use later to commit or rollback the transaction. Note that
changes caused by any queries executed before calling the Begin
Transaction method will be committed to the database immediately after
they execute. Set the Transaction property of the command object to the
above mentioned transaction object. Execute the SQL commands using
the command object. We may use one or more command objects for this
purpose, as long as the Transaction property of all the objects is set to a
valid transaction object. Commit or roll back the transaction using the
Commit or Rollback method of the transaction object. Close the
database connection.
(E)
(I)What is difference between Dataset. clone and
Dataset. copy ?
(F)
Clone: - It only copies structure, does not copy data. Copy: - Copies
(A)Can you explain the difference
between an ADO.NET Dataset and an ADO Recordset?
both structure and data.
(G)
There two main basic differences between recordset and dataset :272 With dataset you an retrieve data from two databases like oracle
and sql server and merge them in one dataset , with recordset this is not
possible All representation of Dataset is using XML while recordset
uses COM. Recordset can not be transmitted on HTTP while Dataset
can be.