Vous êtes sur la page 1sur 9

(B) How do we use stored procedure in ADO.

NET and how do we provide parameters t


o the stored procedures?
ADO.NET provides the SqlCommand object, which provides the functionality of exec
uting stored procedures.
Note :- Sample code is provided in folder WindowsSqlClientCommand. There are two s
tored procedures created in same database Employees which was created for the prev
ious question.
{codecitation class="brush: sql; gutter: true;" width="650px"}
CREATE PROCEDURE SelectByEmployee @FirstName nvarchar(200) AS
Select FirstName from Employees where FirstName like @FirstName + '%'
CREATE PROCEDURE SelectEmployee AS
Select FirstName from Employees
{/codecitation}
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
If txtEmployeeName.Text.Length = 0 Then
objCommand = New SqlCommand(SelectEmployee)
Else
objCommand = New SqlCommand(SelectByEmployee)
objCommand.Parameters.Add(@FirstName, Data.SqlDbType.NVarChar, 200)
objCommand.Parameters.Item(@FirstName).Value = txtEmployeeName.Text.Trim()
End If
{/codecitation}
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 Select Employee which s
elects 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 comm
and object to execute stored procedures and the parameter object to provide para
meter to the stored procedure. Above sample is provided only for getting the act
ual feel of it. Be short be nice and get a job.
(B) How can we force the connection object to close after my data reader is clos
ed?
Command method Execute reader takes a parameter called as Command Behavior where
in we can specify saying close connection automatically after the Data reader i
s close.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
PobjDataReader = pobjCommand.ExecuteReader (CommandBehavior.CloseConnection) {/c
odecitation}
(B) I want to force the data reader to return only schema of the data store rath
er than data.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
PobjDataReader = pobjCommand.ExecuteReader (CommandBehavior.SchemaOnly)
{/codecitation}
(B) How can we fine-tune the command object when we are expecting a single row?
Again, CommandBehaviour enumeration provides two values Single Result and Single
Row. If you are expecting a single value then pass CommandBehaviour.SingleResult
and the query is optimized accordingly, if you are expecting single row then pas
s CommandBehaviour.SingleRow and query is optimized according to single row.
(B) Which is the best place to store connection string in .NET projects?
Config files are the best places to store connection strings. If it is a web-bas
ed 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 data adapter to fill a dataset?
Sample code is provided in WindowsDataSetSample folder in CD.LoadData has all the im
plementation of connecting and loading to dataset. This dataset is finally bind
to a List Box. Below is the sample code.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
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
{/codecitation}
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 f
irst and then we move to what steps should be told during interview.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
Dim objConn As New SqlConnection(strConnectionString)
objConn.Open()
{/codecitaion}
First step is to open the connection. Again, note the connection string is loade
d from config file.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
Dim objCommand As New SqlCommand(Select FirstName from Employees)
objCommand.Connection = objConn
{/codecitation}
Second step is to create a command object with appropriate SQL and set the conne
ction object to this command.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
Dim objDataAdapter As New SqlDataAdapter()
objDataAdapter.SelectCommand = objCommand
{/codecitation}
Third steps is to create the Adapter object and pass the command object to the a
dapter object.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
objDataAdapter.Fill(objDataSet)
{/codecitation}
Fourth step is to load the dataset using the Fill method of the data adapter.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
lstData.DataSource = objDataSet.Tables(0).DefaultView
lstData.DisplayMember = FirstName
lstData.ValueMember = FirstName
{/codecitation}
Fifth step is to bind to the loaded dataset with the GUI. At this moment sample
has list box as the UI. Binding of the UI is done by using Default View of the d
ataset. Just to revise every dataset has tables and every table has views. In th
is sample, we have only loaded one table i.e. Employees table so we are referrin
g that with an index of zero.
Just say all the five steps during interview and you will see the smile on the i
nterviewers 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 X
ML 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?
Dataset has Accept Changes method, which commits all the changes since last time Ac
cept changes has been executed.
Note :- This book does not have any sample of Acceptchanges. We leave that to re
aders 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 lo
aded?
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 Get Cha
nges and Has Changes.
Get Changes
Returns dataset, which are changed since it, was loaded, or since Accept changes
was executed.
Has Changes
Or abandon all changes since the dataset was loaded use Reject Changes This prope
rty indicates that has any changes been made since the dataset was loaded or acc
ept changes method was executed.
Note:- One of the most misunderstood things about these properties is that it tr
acks 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 chang
es happening in actual database. As dataset are disconnected and do not know any
thing about the changes happening in actual database.
(B) How can we add/remove row is in Data Table object of Dataset?
Data table provides NewRow method to add new row to Data Table. Data Table has DataRo
lection object that has all rows in a Data Table object. Following are the methods
provided by DataRowCollection object:-
Add
Adds a new row in Data Table
Remove
It removes a Data Row object from Data Table
Remove At
It removes a Data Row object from Data Table depending on index position of the Data
Table.
(B) What is basic use of Data View?
Data View 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 data table.
Data view has the following methods:-
Find
It takes an array of values and returns the index of the row.
Find Row
This also takes array of values but returns a collection of Data Row.
If we want to manipulate data of Data Table object create Data View (Using the Defaul
t View we can create Data View object) of the Data Table object and use the following
functionalities:-
Add New
Adds a new row to the Data View object.
Delete
Deletes the specified row from Data View object.
(B) What is the difference between Dataset and Data Reader ?
Twist: - Why is Dataset slower than Data Reader is?Fourth point is the answer to
the twist.
Note:- This is my best question and we 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 Data Reader:-
Dataset is a disconnected architecture, while Data Reader 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 b
est choice.
If we need to move back while reading records, data reader does not support this f
unctionality.
However, one of the biggest drawbacks of Dataset is speed. As Dataset carry consid
erable overhead because of relations, multiple tables etc speed is slower than Dat
a Reader. Always try to use Data Reader wherever possible, as it is meant especiall
y for speed performance.
(B) How can we load multiple tables in a Dataset?
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
objCommand.CommandText = "Table1"
objDataAdapter.Fill(objDataSet, "Table1")
objCommand.CommandText = "Table2"
objDataAdapter.Fill(objDataSet, "Table2")
{/codecitation}
Above is a sample code, which shows how to load multiple Data Table objects in one
Dataset object. Sample code shows two tables Table1 and Table2 in object ObjDataSet.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
lstdata.DataSource = objDataSet.Tables("Table1").DefaultView
{/codecitation}
In order to refer Table1 Data Table, use Tables collection of Datasets and the Def
ault view object will give you the necessary output.
(B) How can we add relation between tables in a Dataset?
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
Dim objRelation As DataRelation
objRelation=New
DataRelation("CustomerAddresses",objDataSet.Tables("Customer").Columns("Custid")
,objDataSet.Tables("Addresses").Columns("Custid_fk"))
objDataSet.Relations.Add(objRelation)
{/codecitation}
Relations can be added between Data Table objects using the Data Relation object. Ab
ove sample, code is trying to build a relationship between Customer and Addresses Dat
a table using Customer Addresses Data Relation object.
(B) What is the use of Command Builder?
Command Builder builds Parameter objects automatically. Below is a simple code, wh
ich uses command builder to load its parameter objects.
{codecitation class="brush: vbnet; gutter: true;" width="650px"}
Dim pobjCommandBuilder As New OleDbCommandBuilder(pobjDataAdapter)
pobjCommandBuilder.DeriveParameters(pobjCommand)
{/codecitation}
Be careful while using Derive Parameters method as it needs an extra trip to the D
ata store, which can be very inefficient
(B) Whats difference between Optimistic and Pessimistic locking ?
In pessimistic locking when user wants to update data it locks the record and ti
ll 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. T
his is the most preferred way of locking practically. Now a days in browser base
d application it is very common and having pessimistic locking is not a practica
l solution.
(A) How many ways are there to implement locking in ADO.NET?
Following are the ways to implement locking using ADO.NET:-
When we call Update method of Data Adapter it handles locking internally. If the D
ataset values are not matching with current data in Database, it raises concurre
ncy exception error. We can easily trap this error using Try. Catch block and ra
ise appropriate error message to the user.
Define a Date time stamp field in the table. When actually you are firing the UP
DATE SQL statements, compare the current timestamp with one existing in the data
base. Below is a sample SQL which checks for timestamp before updating and any m
ismatch in timestamp it will not update the records. This I the best practice us
ed by industries for locking.
{codecitation class="brush: sql; gutter: true;" width="650px"}
Update table1 set field1=@test where Last Timestamp=@Current Timestamp
{/codecitation}
Check for original values stored in SQL SERVER and actual changed values. In sto
red procedure check before updating that the old data is same as the current Exa
mple in the below shown SQL before updating field1 we check that is the old fiel
d1 value same. If not then some one else has updated and necessary action has to
be taken.
{codecitation class="brush: sql; gutter: true;" width="650px"}
Update table set field1=@test where field1 = @oldfield1value
{/codecitation}
Locking can be handled at ADO.NET side or at SQL SERVER side i.e. in stored proc
edures. For more details of how to implementing locking in SQL SERVER read What a
re different locks in SQL SERVER? in SQL SERVER chapter.
(A) How can we perform transactions in .NET?
The most common sequence of steps that would be performed while developing a tra
nsactional 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 com
mit or rollback the transaction. Note that changes caused by any queries execute
d before calling the Begin Transaction method will be committed to the database
immediately after they execute. Set the Transaction property of the command obje
ct to the above mentioned transaction object.
Execute the SQL commands using the command object. We may use oneormorecommand o
bjects 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 t
ransaction object.
Close the database connection.
(I) What is difference between Dataset? Clone and Dataset. Copy?
Clone: - It only copies structure, does not copy data.
Copy: - Copies both structure and data.
(A) Can you explain the difference between an ADO.NET Dataset and an ADO Record
set?
There two main basic differences between record set and dataset:-
With dataset you an retrieve data from two databases like oracle and sql server
and merge them in one dataset , with record set this is not possible
All representation of Dataset is using XML while record set uses COM.
Record set cannot be transmitted on HTTP while Dataset can be.
(A) Explain in detail the fundamental of connection pooling?
When a connection is opened first time, a connection pool is created and is base
d on the exact match of the connection string given to create the connection obj
ect. Connection pooling only works if the connection string is the same. If the
connection string is different, then a new connection will be opened, and connec
tion pooling will not be used.
Figure 9.5: - Connection Pooling action.
Let us try to explain the same pictorially. In the above figure, you can see the
re are three requests Request1, Request2, and Request3. Request1 and Request3 have s
nnection string so no new connection object is created for Request3 as the connect
ion string is same. They share the same object ConObject1. However, new object ConO
bject2 is created for Request2 as the connection string is different.
Note: - The difference between the connection string is that one has User id=sa an
d other has User id=Testing.
(A)What is Maximum Pool Size in ADO.NET Connection String?
Maximum pool size decides the maximum number of connection objects to be pooled.
If the maximum pool size is reached and there is no usable connection available
the request is queued until connections are released back in to pool. So its alw
ays a good habit to call the close or dispose method of the connection as soon a
s you have finished work with the connection object.
(A)How to enable and disable connection pooling?
For .NET it is enabled by default but if you want to just make sure set Pooling=
true in the connection string. To disable connection pooling set Pooling=false i
n connection string if it is an ADO.NET Connection. If it is an OLEDBConnection
object set OLE DB Services=-4 in the connection string.
(I) What extra features does ADO.Net 2.0 have ?
Bulk Copy Operation
Bulk copying of data from a data source to another data source is a newly added
feature in ADO.NET 2.0. ADO.NET inrtoduces bulk copy classes which provide faste
st way to transfer\ data from once source to the other. Each ADO.NET data provid
er has bulk copy classes. For example, in SQL .NET data provider, the bulk copy
operation is handled by SqlBulkCopy class, which can read a DataSet, DataTable,
DataReader, or XML objects.
Data Paging
A new method is introduced ExecutePageReader which takes three parameters - Comm
andBehavior, startIndex, and pageSize. So if you want to get rows ony from 10 -
20, you can simply call this method with start index as 10 and page size as 10.
Batch Update
If you want to update large number of data on set ADO.NET 2.0 provides UpdateBat
chSize property, which allows you to set number of rows to be updated in a batch
. This increases the performance dramatically as round trip to the server is min
imized.
Load and Save Methods
In previous version of ADO.NET, only DataSet had Load and Save methods. The Load
method can load data from objects such as XML into a DataSet object and Save me
thod saves the data to a persistent media. Now DataTable also supports these two
methods. You can also load a DataReader object into a DataTable by using the Lo
ad method.
New Data Controls
In toolbox you can see three new controls - DataGridView, DataConnector, and Dat
aNavigator.
DataReader's New Execute Methods
Some new execute methods introduced are ExecutePageReader, ExecuteResultSet, and
ExecuteRow.

Vous aimerez peut-être aussi