Wednesday, February 27, 2013

How to Send Large Amount Of Data in WCF(Streaming),Upload/Download Files Over HTTP



I have tried to transfer large files over HTTP to/from WCF, but I have faced problems in that I was not able to upload files more than 45 KB in size, I have tried many configuration setting combinations and finally succeeded in transferring large files (I have tested up to 1GB on IE6).

To transfer large files using “WCF service + HTTP”, we can use the following types of bindings:
1.  wsHttpBinding
2.  basicHttpBinding   

        In wsHttpBinding, we can set the transfermode attribute as Buffered, but there is a disadvantage in using this approach for large files, because it needs to put the entire file in memory before uploading/downloading, A large buffer is required on both the web client and the WCF service host. However, this approach is very useful for transferring small files, securely.
In basicHTTPBinding we can use the transfermode as Streamed so that the file can be transferred in the form of chunks. We have to ensure additional security mechanisms for transferring chunks. The security mechanisms are not explained in this posting.

Create WCF Contract with Use Of Interface:-
Create a new “WCF Service” project. Create a new service with the name TransferService. Now we will see an interface file “ITransferService” and a class file TransferService.csITransferService should have two methods, one for upload and one for download.

WCF Service Sample Interface Code:
[ServiceContract]
public interface ITransferService
{
    [OperationContract]
    RemoteFileInfo DownloadFile(DownloadRequest request);

    [OperationContract]
     void UploadFile(RemoteFileInfo request);
}
[MessageContract]
public class DownloadRequest
{
    [MessageBodyMember]
    public string FileName;
}

[MessageContract]
public class RemoteFileInfo : IDisposable
{
    [MessageHeader(MustUnderstand = true)]
    public string FileName;

    [MessageHeader(MustUnderstand = true)]
    public long Length;

    [MessageBodyMember(Order = 1)]
    public System.IO.Stream FileByteStream;

    public void Dispose()
    {
        if (FileByteStream != null)
        {
            FileByteStream.Close();
            FileByteStream = null;
        }
    }  
}

WCF Service Sample Interface Implementation Code:-
public RemoteFileInfo DownloadFile(DownloadRequest request)
{
    RemoteFileInfo result = new RemoteFileInfo();
    try
    {
   string filePath = System.IO.Path.Combine(@"c:\Uploadfiles", request.FileName);
        System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);

        // check if exists
        if (!fileInfo.Exists)
    throw new System.IO.FileNotFoundException("File not found",request.FileName);
        // open stream
        System.IO.FileStream stream = new System.IO.FileStream(filePath,
                  System.IO.FileMode.Open, System.IO.FileAccess.Read);
            // return result
            result.FileName = request.FileName;
            result.Length = fileInfo.Length;
            result.FileByteStream = stream;
        }
        catch (Exception ex)
        {
        }
        return result;
    }
    public void UploadFile(RemoteFileInfo request)
    {
        FileStream targetStream = null;
        Stream sourceStream =  request.FileByteStream;
        string uploadFolder = @"C:\upload\";
        string filePath = Path.Combine(uploadFolder, request.FileName);
        using (targetStream = new FileStream(filePath, FileMode.Create,
                              FileAccess.Write, FileShare.None))
        {
            //read from the input stream in 65000 byte chunks
            const int bufferLen = 65000;
            byte[] buffer = new byte[bufferLen];
            int count = 0;
            while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0)
            {
                // save to output stream
                targetStream.Write(buffer, 0, count);
            }
            targetStream.Close();
            sourceStream.Close();
        }
    }

Changing in Web.Config File in Wcf (Server Side):-

The following settings are most important for transferring large data:

·         ReaderQuotas: We have to set the maximum sizes (this depends on our specific requirement). Here I have set to the maximum values where we can transfer data up to 2GB, as per MSDN/www documentation.   <binding name="TransferService"
maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" transferMode="Streamed" > <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>

 A word about my experiences here: I have used the above settings alone and received the error “400 bad request” from the WCF service on the browser.This error may occur due to many reasons: the reasons might be configuration mismatch between the web server and the WCF service, or an exception raised in the WCF service etc.

BindingConfiguration: This attribute is not available by default in the endpoint section. When I added this attribute, the “400 bad request” exception disappeared and the upload and download executed well.

<endpoint address="" binding="basicHttpBinding"
          bindingConfiguration="TransferService"
          contract ="ITransferService">
</endpoint>
Along with the above settings, HttpRuntime settings should also be placed in the web.config file as below:
<httpRuntime maxRequestLength="2097151" //Maxvalue
     useFullyQualifiedRedirectUrl="true" executionTimeout="14400"   />  //can be configured as per the requirement.

Create Web Site Or Client or Calling To Services :-

Create a new “web site” project. Place a link button and a file upload control on the web page. Create one more button to upload the file. Add the reference of the WCF service in “Service References” with a suitable name, currently FileTransferServiceReference.

The following changes need to be done in web.config after adding the service reference: 

<binding name="BasicHttpBinding_ITransferService" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true">

<readerQuotas maxDepth="128" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

<security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" />

<message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding>

Increase the values for the readerQuotas attribute and also increase the timeout settings.  

The code-behind of the page is the following:

protected void LinkButton1_Click(object sender, EventArgs e)
 {
     try
       {
 FileTransferServiceReference.ITransferService clientDownload = new TransferServiceClient(); 
 FileTransferServiceReference.DownloadRequest requestData = new DownloadRequest(); 
 FileTransferServiceReference.RemoteFileInfo fileInfo = new RemoteFileInfo(); requestData.FileName = "codebase.zip";
 fileInfo = clientDownload.DownloadFile(requestData);
 Response.BufferOutput = false; // to prevent buffering 
 byte[] buffer = new byte[6500]; 
 int bytesRead = 0;
 HttpContext.Current.Response.Clear();
 HttpContext.Current.Response.ClearHeaders();
 HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + requestData.FileName);
 bytesRead = fileInfo.FileByteStream.Read(buffer, 0, buffer.Length); 
 while (bytesRead > 0)
   { 
 // Verify that the client is connected. 
      if (Response.IsClientConnected)
        {
       Response.OutputStream.Write(buffer, 0, bytesRead); // Flush the data to the HTML output. 
       Response.Flush(); 
       buffer = new byte[6500]; 
       bytesRead = fileInfo.FileByteStream.Read(buffer, 0, buffer.Length);
       } 
      else    {        bytesRead = -1;       }

    }
 }
   catch (Exception ex) 
      { // Trap the error, if any.
         System.Web.HttpContext.Current.Response.Write("Error : " + ex.Message);
      }
    finally
      { 
       Response.Flush(); 
       Response.Close();
       Response.End();  
       System.Web.HttpContext.Current.Response.Close();
       }
   } 
 protected void Button1_Click(object sender, EventArgs e)
  {
   if (FileUpload1.HasFile) 
   {
System.IO.FileInfo fileInfo = new System.IO.FileInfo(FileUpload1.PostedFile.FileName); FileTransferServiceReference.ITransferService clientUpload = new FileTransferServiceReference.TransferServiceClient(); FileTransferServiceReference.RemoteFileInfo uploadRequestInfo = new RemoteFileInfo();           
using (System.IO.FileStream stream = new System.IO.FileStream (FileUpload1.PostedFile.FileName,                        System.IO.FileMode.Open, System.IO.FileAccess.Read))
  {   
     uploadRequestInfo.FileName = FileUpload1.FileName;
     uploadRequestInfo.Length = fileInfo.Length;
     uploadRequestInfo.FileByteStream = stream;
    clientUpload.UploadFile(uploadRequestInfo);
   //clientUpload.UploadFile(stream);
    }
  } 
}
Now build both the IDE projects and execute the web server project. This still works only for less than 50KB! If you select a large file to be uploaded, you will see a blank webpage.
Now, you need to add one more attribute, MaxRequestLength, in the httpRuntime section in thesystem.web configuration file section, as below:

<httpRuntime maxRequestLength="2097150"/>

That is it! Now one can download and upload large files (I have tested up to ~1GB) from an IE6 browser over HTTP to a WCF service. 

Ref:  http://www.codeproject.com

How to Make bootable Pendrive

When You Have to Install Windows(Xp,Vista,7) and you don't have CD to install.then you think could i install my window with Pendrive.
The answer is Yes! but again new question arises How?if You don't Know the answer then it is By making your Pendrive Bootable.Questions again arises like..


1. How To Boot From A USB Flash Drive?
2.How to Install Windows 7 From a USB Flash Drive or USB Hard Drive?
3.How To Create Bootable Windows 7, Vista, or XP USB Flash/Pen Drive Quickly? etc. etc.

So the Solution is Below..
Method 1.
Requirements to create bootable Windows USB:

# Windows 7 or Vista ISO

# Pen drive with 4GB+ (2 GB is sufficient for XP)

# 15 Minutes of free time


Procedure:

1. Insert your USB flash/pen drive to your system and backup all the data from the USB as your USB drive will be formatted during the process.

2. Now download WinToFlash tool (free) from here.




3. Run the tool, and browse to your Windows 7, Vista, or XP DVD files (make sure that your USB drive letter is correct).

"WinToFlash starts a wizard that will help pull over the contents of a windows installation CD or DVD and prep the USB drive to become a bootable replacement for the optical drive. It can also do this with your LiveCD.


You don't have to worry about scratches on the disc or misplacing your original media discs once you transfer their contents to the flash drive. The optical drive is quickly becoming a thing of the past, especially in office environments, as media is shifted to the cloud."

4. Click Create button to begin the bootable USB process. Wait for few minutes to see the bootable USB.

Method 2: Manually
Create Your Pendrive Bootable 
bootable USB guide, here we assume that you are using either Vista or Windows 7 to create a bootable USB.
1. Insert your USB (4GB+ preferable) stick to the system and backup all the data from the USB as we are going to format the USB to make it as bootable. 

2. Open elevated Command Prompt. To do this, type in CMD in Start menu search field and hit Ctrl + Shift + Enter. Alternatively, navigate to Start > All programs >Accessories > right click on Command Prompt and select run as administrator. 

3. When the Command Prompt opens, enter the following command:
DISKPART and hit enter.
LIST DISK and hit enter. 

Once you enter the LIST DISK command, it will show the disk number of your USB drive. In the below image my USB drive disk no is Disk 1. 

4. In this step you need to enter all the below commands one by one and hit enter. As these commands are self explanatory, you can easily guess what these commands do. 

SELECT DISK 1 (Replace DISK 1 with your disk number)
CLEAN
CREATE PARTITION PRIMARY
SELECT PARTITION 1
ACTIVE
FORMAT FS=NTFS
(Format process may take few seconds)
ASSIGN

EXIT 

Don’t close the command prompt as we need to execute one more command at the next step. Just minimize it. 

5. Insert your Windows DVD in the optical drive and note down the drive letter of the optical drive and USB media. Here I use “D” as my optical (DVD) drive letter and “G” as my USB drive letter. 

6. Go back to command prompt and execute the following commands:
6.1. Change directory to the DVD’s boot directory where bootsect lives:
d:
cd d:\boot

6.2. Use bootsect to set the USB as a bootable NTFS drive prepared for a Vista/7 image. I’m assuming that your USB flash drive has been labeled diskG:\ by the computer:
bootsect /nt60 g: 


(Where “G” is your USB drive letter) 

7. Copy Windows DVD contents to USB. 

You are done with your bootable USB. You can now use this bootable USB as bootable DVD on any computer that comes with USB boot feature (most of the current motherboards support this feature). 

Tuesday, February 26, 2013

ADO.Net Interview Question and Answers



ADO.Net Interview Question and Answers

1. What is Ado.NET?
   ADO.NET is an object-oriented set of libraries that allows you to interact with data sources.     ADO.NET is a set of classes that expose data access services to the .NET programmer. ADO.NET is also a part of the .NET Framework.  ADO.NET is used to handle data access.

2. What are the two fundamental objects in ADO.NET?
    There are two fundamental objects in ADO.NET. Datareader - connected architecture and Dataset - disconnected architecture.

3.  What are the data access namespaces in .NET?
    The most common data access namespaces :
    System.Data    System.Data.OleDb   System.Data.SQLClient   System.Data.SQLTypes
   System.Data.XML

4. What are major difference between classic ADO and ADO.NET?
    In ADO the in-memory representation of data is the recordset.A Recordset object is used
to hold a set of records from a database table.In ADO.NET we have dataset.A DataSet is an in memory representation of data loaded from any data source.

5.  what is the use of connection object in ado.net?
   The ADO Connection Object is used to create an open connection to a data source.
Through this connection, you can access and manipulate a database.

6. What are the benefits of ADO.NET?
    Scalability    
    Data Source Independence
    Interoperability   
     Strongly Typed Fields
    Performance

7. What is a Clustered Index?
   The data rows are stored in order based on the clustered index key. Data stored is in a
sequence of the index. In a clustered index, the physical order of the rows in the table is the
same as the logical (indexed) order of the key values. A table can contain only one clustered
index. A clustered index usually provides faster access to data than does a non-clustered index.

8.  What is a Non-Clustered Index?
   The data rows are not stored in any particular order, and there is no particular order to the
sequence of the data pages. In a clustered index, the physical order of the rows in the table is
not same as the logical (indexed) order of the key values.

9. Whate are different types of Commands available with DataAdapter ?
    The SqlDataAdapter has
    SelectCommand    
    InsertCommand    
    DeleteCommand
    UpdateCommand

10. What is the difference between an ADO.NET Dataset and an ADO Recordset?
      Dataset can fetch source data from many tables at a time, for Recordset you can achieve the same only using the SQL joins. A DataSet can represent an entire relational database in memory, complete with tables, relations, and views, A Recordset can not.
 A DataSet is designed to work without any continues connection to the original data source;
Recordset maintains continues connection with the original data source. DataSets have no current record pointer, you can use For Each loops to move through the data. Recordsets have pointers to move through them.

11. Which method do you invoke on the DataAdapter control to load your generated dataset
with data?
    DataAdapter’ fill () method is used to fill load the data in dataset.

12. What are the different methods available under sqlcommand class to access the data?
      ExecuteReader - Used where one or more records are returned - SELECT Query.
      ExecuteNonQuery - Used where it affects a state of the table and no data is being  
queried -  INSERT, UPDATE, DELETE, CREATE and SET queries.
     ExecuteScalar - Used where it returns a single record.

13  .Explain the namespaces in which .NET has the data functionality class.
  System.data contains basic objects. These objects are used for accessing and storing  
relational data. Each of these is independent of the type of data source and the way we   
connect to it.
  These objects are:
  DataSet  
  DataTable
  DataRelation.
  System.Data.OleDB objects are used to connect to a data source via an OLE-DB provider.  These objects have the same properties, methods, and events as the SqlClient equivalents. A few of the object providers are:
 OleDbConnection
 OleDbCommand
 System.Data.SqlClient objects are used to connect to a data source via the Tabular Data 
Stream (TDS) interface of only Microsoft SQL Server. The intermediate layers required by an OLE-DB connection are removed in this. This provides better performance.
 System.XML contains the basic objects required to create, read, store, write, and manipulate 
XML documents according to W3C recommendations.

14.  Overview of ADO.NET architecture.
  Data Provider provides objects through which functionalities like opening and closing 
connection, retrieving and updating data can be availed. It also provides access to data source like SQL Server, Access, and Oracle). Some of the data provider objects are: Command object which is used to store procedures. Data Adapter which is a bridge between datastore and dataset. Datareader which reads data from data store in forward only mode.
 A dataset object is not in directly connected to any data store. It represents disconnected and 
cached data. The dataset communicates with Data adapter that fills up the dataset. Dataset 
can have one or more Datatable and relations.   DataView object is used to sort and filter data in Datatable. 

 ADO.NET provides access to all kind of data sources such as Microsoft SQL Server, OLEDB, 
Oracle, XML.
 ADO.NET separates out the data access and data manipulation componenets. ADO.NET 
includes some providers from the .NET Framework to connect to the database, to execute 
commands, and finally to retrieve results. Those results are either directly used or can be put 
in dataset and manipulate it.

14. Define connected and disconnected data access in ADO.NET
 Data reader is based on the connected architecture for data access. Does not allow data
manipulation
 Dataset supports disconnected data access architecture. This gives better performance results.Define connected and disconnected data access in ADO.NET Data reader is based on the connected architecture for data access. Does not allow data manipulation
Dataset supports disconnected data access architecture. This gives better performance results.

15.Describe CommandType property of a SQLCommand in ADO.NET.
CommandType is a property of Command object which can be set to Text, Storedprocedure.
If it is Text, the command executes the database query. When it is StoredProcedure, the
command runs the stored procedure. A SqlCommand is an object that allows specifying what
is to be performed in the database.
Access database at runtime using ADO.NET
SqlConnection sqlCon = new SqlConnection(connectionString)
sqlCon.Open();
string strQuery = "select CategoryName from abcd";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{       
    Console.WriteLine(reader [0]);  
  }
reader.Close();
con.Close();

16.  Difference between dataset and datareader.
 Dataset
DataSet object can contain multiple rowsets from the same data source as well as from the
relationships between them Dataset is a disconnected architecture Dataset can persist data.
Datareader
DataReader provides forward-only and read-only access to data.Datareader is connected architecture Datareader can not persist data.
Difference between dataset and datareader.
Dataset
a. Disconnected
b. Can traverse data in any order front, back.
c. Data can be manipulated within the dataset.
d. More expensive than datareader as it stores multiple rows at the same time.
Datareader
a. Connection needs to be maintained all the time
b. Can traverse only forward.
c. It is read only therefore, data cannot be manipulated.
d. It is less costly because it stores one row at a time

17.  Command objects uses, purposes and their methods.
    The command objects are used to connect to the Datareader or dataset objects with the
help of the following methods:
ExecuteNonQuery:
This method executes the command defined in the CommandText property.The connection used is defined in the Connection property for a query.It returns an Integer indicating the number of rows affected by the query.
ExecuteReader:
This method executes the command defined in the CommandText property.The connection used is defined in the Connection property. It returns a reader object that is connected to the resulting rowset within the database, allowing the rows to be retrieved.
ExecuteScalar:
This method executes the command defined in the CommandText property.The connection used is defined in the Connection property. It returns a single value which is the first column of the first row of the resulting rowset.The rows of the rest of the result are discarded. It is fast and efficient in cases where a singleton value is required.
Command objects uses, purposes and their methods. Command objects are used to execute the queries, procedures. Sql statements etc. It can execute stored procedures or queries that use parameters as well.
It works on the basis of certain properties like ActiveConnection, CommandText, CommandType, Name etc.
Command object has three methods:
a) Execute: executes the queries, stored procedures etc.
b) Cancel: stops the method execution
c) CreateParameter: to create a parameter object

18.  Explain the use of data adapter.
The data adapter objects connect a command objects to a Dataset object. They provide the means for the exchange of data between the data store and the tables in the DataSet.
An OleDbDataAdapter object is used with an OLE-DB provider A SqlDataAdapter object uses Tabular Data Services with MS SQL Server.

19.Explain the use of data adapter.
Data adapters are the medium of communication between datasource like database and dataset. It allows activities like reading data, updating data.

20.  What are basic methods of Dataadapter?
The most commonly used methods of the DataAdapter are:
Fill:
This method executes the SelectCommand to fill the DataSet object with data from the data
source.
Depending on whether there is a primary key in the DataSet, the ‘fill’ can also be used to
update an existing table in a DataSet with changes made to the data in the original datasource.
FillSchema
This method executes the SelectCommand to extract the schema of a table from the data
source.
It creates an empty table in the DataSet object with all the corresponding constraints.
Update
This method executes the InsertCommand, UpdateCommand, or DeleteCommand to update
the original data source with the changes made to the content of the DataSet.

21.Explain the basic methods of Dataadapter
Some basic methods of dataadpater are:
a. Fill: adds or updates the rows to dataset from the datasource
b. FillSchema: adds a datatable with the sameschema as in the datasource
c. Update: it calls insert, update, delete sql commands for transferring all the changes from the
dataset to the datasource
d. Dispose : releases all the resources

22.  What is Dataset object? Explain the various objects in Dataset?
The DataSet object is a disconnected storage.It is used for manipulation of relational data. The DataSet is filled with data from the storeWe fill it with data fetched from the data store. Once the work is done with the dataset, connection is reestablished and the changes are reflected back into the store.
Dataset has a collection of Tables which has DataTable collection which further has DataRow
DataColumn objects collections.
It also has collections for the primary keys, constraints, and default values called as constraint
collection. A DefaultView object for each table 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.

23.What is Dataset object? Explain the various objects in Dataset.
The DataSet object represents imported or linked data from an application e.g. manually created Pushpins etc. This object is invalidated once the application is closed. Dataset contains another collection known as DataTable object. Each DataTable contains a collection of DataRow objects and each DataRow is a collection of DataColumn objects.

24. What are the steps involved to fill a dataset?
The DataSet object is a disconnected storage.It is used for manipulation of relational data. The DataSet is filled with data from the store We fill it with data fetched from the data store. Once the work is done with the dataset, connection is reestablished and the changes are reflected back into the store.
What are the steps involved to fill a dataset?
a. Create a connection object.
b. Create an adapter by passing the string query and the connection object as parameters.
c. Create a new object of dataset.
d. Call the Fill method of the adapter and pass the dataset object.
Example:
VB.NET Code:-
Dim strSQL as String
strSQL = "SELECT * from tbl"
Dim sqlCmd As New SqlCommand(strSQL, sqlConn)
Dim sda As New SqlDataAdapter(sqlCmd)
Dim ds As New DataSet
sda.Fill(ds)

24. How can we check that some changes have been made to dataset since it was loaded?
The changes made to the dataset can be tracked using the GetChanges and HasChanges
methods.The GetChanges returns dataset which are changed since it was loaded or since
Acceptchanges was executed. The HasChanges property indicates if any changes were made to the dataset since it was loaded or if acceptchanges method was executed.The RejectChanges can be used to revert thee changes made to the dataset since it was
loaded.
How can we check that some changes have been made to dataset since it was loaded?
a. GetChanges: gives the dataset that has changed since newly loaded or since Accept
changes has been executed.
b. HasChanges: this returns a status that tells if any changes have been made to the dataset
since accept changes was executed.

25.  How can we add/remove row’s in “DataTable” object of “DataSet”?
‘NewRow’ method is provided by the ‘Datatable’ to add new row to it. ‘DataTable’ has DataRowCollection” object which has all rows in a “DataTable” object. Add method of the DataRowCollection is used to add a new row in DataTable.We fill it with data fetched from the data store. Once the work is done with the dataset, connection is reestablished Remove method of the DataRowCollection is used to remove a ‘DataRow’ object from
‘DataTable’. RemoveAt method of the DataRowCollection is used to remove a ‘DataRow’ object from  DataTable’ per the index specified in the DataTable.

26.How can we add/remove row’s in “DataTable” object of “DataSet”?
Datatable has a “NewRow” method that allows addition of a new row to the datatable.

27. How do we use stored procedure in ADO.NET and how do we provide parameters to the stored procedures?
CREATE PROCEDURE RUPDATE (@RID INTEGER, @RDESC NCHAR(50))
AS
SET NOCOUNT OFF
UPDATE Region
SET RDESC = @RDESC
SqlCommand command = new SqlCommand("RUPDATE",con);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@RID",SqlDbType.Int,0,"RID"));
command.Parameters.Add(new SqlParameter("@RDESC",SqlDbType.NChar,50,"RDESC"));
command.Parameters[0].Value=4;
command.Parameters[1].Value="SouthEast";
int i=command.ExecuteNonQuery();
How do we use stored procedure in ADO.NET and how do we provide parameters to the
stored procedures?
SqlCommand cmd1 = new SqlCommand("Employee", conn); Employee is the name of the
stored procedure
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@empID", empId));

28. Explain the basic use of “DataView” and explain its methods.
 A DataView is a representation of a full table or a small section of rows.It is used to sort and find data within Datatable.
Following are the methods of a DataView:
Find : Parameter: An array of values; Value Returned: Index of the row
FindRow : Parameter: An array of values; Value Returned: Collection of DataRow
AddNew : Adds a new row to the DataView object.
Delete : Deletes the specified row from DataView object

29.Explain the basic use of “DataView” and explain its methods.
It is a customizable view of a datatable that allows filtering, searching, editing, navigation.
DataView method:
a. AddNew: To add a new row to the DataView.
b. BeginInit: Begins the initialization of a DataView.
c. CopyTo: items are copied into an array.
d. Delete: Used to delete a row at the specified position.
e. Dispose: Releases the resources.
f. EndInit: Ends the initialization of a DataView.
g. Equals: Compares object instances are equal or not.
h. Find: Finds a specific row in the DataView.
i. FindRows: Returns an array of DataRowView
j. GetEnumerator: Gets an enumerator.
k. GetHashCode: it is used in hashing algorithms.
l. GetService : fetches the implementer of the IServiceProvider.
m. GetType : fetches the current instance type.
n. ToString : Returns a String.
o. Close: Used to close a DataView.
p. ColumnCollectionChanged: Occurs after a DataColumnCollection is successfully changed
q. Dispose: can be overloaded
 r. Finalize: Used to free resources and cleanup before objects are handeled by garbage
collection.
s. IndexListChanged: This event tab=kes place when DataView has been changed successfully.
t. MemberwiseClone : Creates a shallow copy.
u. OnListChanged: Raises the ListChanged event.
v. Open: To open a DataView. 

30.  Differences between “DataSet” and “DataReader”.
Dataset
DataSet object can contain multiple rowsets from the same data source as well as from the
relationships between them Dataset is a disconnected architecture
Dataset can persist data.A DataSet is well suited for data that needs to be retrieved from multiple tables.Due to overhead DatsSet is slower than DataReader.
Datareader
DataReader provides forward-only and read-only access to data.Datareader is connected architecture. It has live connection while reading data Datareader can not persist data.Speed performance is better in DataReader.

31.  Explain how to load multiple tables in a DataSet.
 MyDataSet myds = new MyDataSet();
SqlDataAdapter myda = new SqlDataAdapter ("procId", this.Connection);
myda.SelectCommand.CommandType = CommandType.StoredProcedure;
myda.SelectCommand.Parameters.AddWithValue ("@pId", pId);
myda.TableMappings.Add ("Table", myds.xval.TableName);
myda.Fill (myds);
ADO.NET Code showing Dataset storing multiple tables.
DataSet ds = new DataSet();
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
ds.Tables.Add(dtn);

32.  What is the use of CommandBuilder?
CommandBuilder builds “Parameter” objects automatically.
Example:
Dim pobjCommandBuilder As New OleDbCommandBuilder(pobjDataAdapter)
pobjCommandBuilder.DeriveParameters(pobjCommand)

If DeriveParameters method is used, an extra trip to the Datastore is madewhich can highly
affect the efficiency.

33.What is the use of CommandBuilder?
CommandBuilder is used to build complex queries. It can even build commands that are based
on the returned results. CommandBuilder is less error prone and more readable than the command object.

34. What’s difference between “Optimistic” and “Pessimistic” locking?
In pessimistic locking, when a user opens a data to update it, a lock is granted. Other users
can only view the data until the whole transaction of the data update is completed.In optimistic locking, a data is opened for updating by multiple users. A lock is granted only during the update transaction and not for the entire session. Due to this concurrency is increased and is a practical approach of updating the data.

What’s difference between “Optimistic” and “Pessimistic” locking?
Pessimistic locking: On updating the data, the record gets locked and no one else can access
that record for updating. It becomes a read-only record till the lock is released. Once the lock
gets released, the record can be locked again and get updated for a different user.
Optimistic locking: This allows multiple user to open up the same record for updation . Record
gets locked only while updating the record. This is the most preferred way of locking for the
web application.

35. How can we perform transactions in .NET?
Following are the general steps that are followed during a transaction:
Open connection
Begin Transaction: the begin transaction method provides with a connection object this can be
used to commit or rollback.
Execute the SQL commands
Commit or roll back
Close the database connection

36.How can we perform transactions in .NET?
Steps to perform a transaction
a. Call the Begin Transaction. This marks the beginning of the transaction.
b. Assign the Transaction object returned by Begin Transaction to the Transaction property of
the SqlCommand.
c. Execute the command.
d. Call the Commit method from SqlTransaction object to save the changes made to the data
through the transaction. Call Rollback undo all the transaction which belong to this transaction.

37. What is connection pooling and what is the maximum Pool Size in ADO.NET Connection String?
A connection pool is created when a connection is opened the first time. The next time a
connection is opened, the connection string is matched and if found exactly equal, the
connection pooling would work.Otherwise, a new connection is opened, and connection pooling won't be used.Maximum pool size is the maximum number of connection objects to be pooled.
If the maximum pool size is reached, then the requests are queued until some connections are
released back to the pool. It is therefore advisable to close the connection once done with it.
What is connection pooling and what is the maximum Pool Size in ADO.NET Connection
String?
Connection pooling is a method of reusing the active database connections instead of creating
new ones every time the user request one. Connection pool manager keeps track of all the
open connections. When a new request comes in, the pool manager checks if there exists any
unused connections and returns one if available. If all connections are busy and the maximum
pool size has not been reached, a new connection is formed and added to the pool. And if the
max pool size is reached, then the requests gets queued up until a connection in the pool
becomes available or the connection attempt times out.
Connection pooling behavior is controlled by the connection string parameters. The following
are four parameters that control most of the connection pooling behavior:
Default max pool size is 100.

38. Can you explain how to enable and disable connection pooling?
Set Pooling=true. However, it is enabled by default in .NET.
To disable connection pooling set Pooling=false in connection string if it is an ADO.NET
Connection.
If it is an OLEDBConnection object set OLEDB Services=-4 in the connection string.
Can you explain how to enable and disable connection pooling?
To enable connection pooling:
SqlConnection myConnection = new SqlConnection(@"Data Source=(local)
\SQLEXPRESS;Initial Catalog=TEST;Integrated Security=SSPI;");
This has connection pooling on by default
To disable connection pooling:
SqlConnection myConnection = new SqlConnection(@"Data Source=(local)
\SQLEXPRESS;Initial Catalog=TEST;Integrated Security=SSPI;Pooling=false;");