I love Programming, and Eager to learn New things Curious about Microsoft Products, Interested in Knowledge sharing. If you can dream IT, You can become it, If you can think IT, You can do IT, If you can believe it, you can achieve IT.

Following script are very useful to know all the constraint in the database. I use this many times to check the foreign key and primary key constraint in database. This is simple but useful script from my personal archive.

SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint, SCHEMA_NAME(schema_id) AS SchemaName, OBJECT_NAME(parent_object_id) AS TableName, type_desc AS ConstraintType FROM sys.objects WHERE type_desc LIKE '%CONSTRAINT'

SUMMARY

This article discusses how you can use ADO.NET to retrieve data from a Microsoft Excel workbook, modify data in an existing workbook, or add data to a new workbook. To access Excel workbooks with ADO.NET, you can use the Jet OLE DB provider; this article provides the information that you need so that you can use the Jet OLE DB provider when Excel is the target data source.

How to Use the Jet OLE DB Provider With Microsoft Excel Workbooks

The Microsoft Jet database engine can access data in other database file formats, such as Excel workbooks, through installable Indexed Sequential Access Method (ISAM) drivers. To open external formats supported by the Microsoft Jet 4.0 OLE DB Provider, specify the database type in the extended properties for the connection. The Jet OLE DB Provider supports the following database types for Microsoft Excel workbooks:

Excel 3.0 Excel 4.0 Excel 5.0 Excel 8.0

NOTE: Use the Excel 5.0 source database type for Microsoft Excel 5.0 and 7.0 (95) workbooks and use the Excel 8.0 source database type for Microsoft Excel 8.0 (97), 9.0 (2000) and 10.0 (2002) workbooks. The examples in this article use Excel workbooks in the Excel 2000 and Excel 2002 format.

Connection String

To access an Excel workbook by using the Jet OLE DB Provider, use a connection string that has the following syntax:

In the connection string, specify the full path and file name for the workbook in the Data Source parameter. The Extended Properties parameter may contain two properties: a property for the ISAM version and a property to indicate whether or not the table(s) include headers.

With Excel workbooks, the first row in a range is the header row (or field names) by default. If the first range does not contain headers, you can specify HDR=NO in the extended properties in your connection string. If you specify HDR=NO in the connection string, the Jet OLE DB provider automatically names the fields for you (F1 represents the first field, F2 represents the second field, and so on).

Data Types

Unlike a traditional database, there is no direct way to specify the data types for columns in Excel tables. Instead, the OLE DB provider scans eight rows in a column to guess the data type for the field. You can change the number of rows to scan by specifying a value between one (1) and sixteen (16) for the MAXSCANROWS setting in the extended properties of your connection string.

Table Naming Conventions

There are several ways you can reference a table (or range) in an Excel workbook:

•

Use the sheet name followed by a dollar sign (for example, [Sheet1$] or [My Worksheet$]). A workbook table that is referenced in this manner includes the whole used range of the worksheet.

Select * from [Sheet1$]

•

Use a range with a defined name (for example, [MyNamedRange]):

Select * from [MyNamedRange]

•

Use a range with a specific address (for example, [Sheet1$A1:B10]):

Select * from [Sheet1$A1:B10]

NOTE: The dollar sign following the worksheet name is an indication that the table exists. If you are creating a new table, as discussed in the Create New Workbooks and Tables section of this article, do not use the dollar sign.

How to Use Excel Workbooks as ADO.NET Data Sources

Retrieve Records

You can retrieve records from a database by using one of two approaches in ADO.NET: with a Dataset or with a DataReader.

A Dataset is a cache of records retrieved from a data source. The data in the Dataset is usually a much-reduced version of what is in the database. However, you can work with it in the same way that you work with the actual data and remain disconnected from the actual database. Besides data retrieval, you can also use a Dataset to perform update operations on the underlying database.

Alternatively, you can use a DataReader to retrieve a read-only, forward-only stream of data from a database. When you use the DataReader program, performance increases and system overhead is decreases because only one row at a time is ever in memory. If you have a large quantity of data to retrieve and you do not intend to make changes to the underlying database, a DataReader is a better choice than a Dataset.

Add and Update Records

With ADO.NET, you can insert and update records in a workbook in one of three ways:

•

Directly run a command to insert or update records one at a time. To do this, you can create an OLEDbCommand object on your connection and set its CommandText property to a valid command to insert records

INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')

or a command to update records

UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'

and then call the ExecuteNonQuery method.

•

Make changes to a DataSet that you have filled with a table/query from an Excel workbook and then call the Update method of the DataAdapter to resolve changes from the DataSet back to the workbook. However, to use the Update method for change resolution you must set parameterized commands for the DataAdapter's InsertCommand

INSERT INTO [Sheet1$] (F1, F2) values (?, ?)

and UpdateCommand:

UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?

Parameterized INSERT and UPDATE commands are required because the OleDbDataAdapter does not supply key/index information for Excel workbooks; without key/index fields, the CommandBuilder cannot automatically generate the commands for you.

•

Export data from another data source into an Excel workbook provided that the other data source can be used with the Jet OLE DB Provider. Data sources that you can use with the Jet OLE DB Provider in this manner include Text files, Microsoft Access databases, and, of course, other Excel workbooks. With a single INSERT INTO command, you can export data from another table/query into your workbook:

When you use SELECT..INTO, if the target table or workbook does not exist, it will be created for you. If the table already exists before the SELECT..INTO command is issued, you will receive an error.

The Sample Code section later in this article illustrates each of these approaches to add and update records in a workbook.

Delete Records

Although the Jet OLE DB Provider allows you to insert and update records in an Excel workbook, it does not allow DELETE operations. If you try to perform a DELETE operation on one or more records, you receive the following error message:

Deleting data in a linked table is not supported by this ISAM.

This limitation is inherent in the treatment of Excel workbooks as databases.

Create Workbooks and Tables

To create a table in an Excel workbook, run the CREATE TABLE command:

CREATE TABLE Sheet1 (F1 char(255), F2 char(255))

When you run this command, a new worksheet is created with the name of the table you specify in the command. If the workbook for the connection does not exist, it too will be created.

The Sample Code section illustrates how you can use the CREATE TABLE command to create a new workbook and table.

Step-by-Step

Sample Code

1.

Start a new Visual Basic .NET Windows Application project.

Form1 is created by default.

2.

Add six RadioButton controls and a Button control to Form1.

3.

Select all of the RadioButton controls and set the Size property to 200,24.

'==================================================================== 'Use the InsertCommand object to add new records to the InventoryData 'table. '==================================================================== Dim conn2 As New OleDbConnection(m_sConn2) Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2) Dim ds As DataSet = New DataSet() da.Fill(ds, "MyExcelTable")

'======================================================================= ' Run an INSERT..INTO command on the Northwind database to append ' the records from a table/query to an existing table in the Excel ' workbook.'======================================================================= cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:ExcelData1.xls' 'Excel 8.0;'" & _ "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees" cmd.ExecuteNonQuery()

'========================================================================== ' Run a SELECT..INTO command on the Northwind database to insert ' all the records from a table/query into a new sheet in the Excel ' workbook.'========================================================================== cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:ExcelData2.xls].[ProductSales]" & _ "FROM [Product Sales for 1997]" cmd.ExecuteNonQuery()

conn.Close()

End Sub

7.

Modify the path to the sample Access database, Northwind, for the m_sNorthwind member in the code, if necessary.

Try It Out

1.

On the View menu, point to Other Windows, and then click Output to display the Output window.

2.

Press F5 to build and run the program.

3.

Click Create_Workbook and then click Go. The Create_Workbook procedure runs CREATE TABLE commands to create two new workbooks: C:ExcelData1.xls and C:ExcelData2.xls. ExcelData1.xls contains one sheet (table) named EmployeeData and ExcelData2.xls contains one sheet (table) named InventoryData. The tables are filled with records.

NOTE: At each remaining step in this test, open the workbooks in Excel to examine the results. Or, click Retrieve_Records to view the contents of the table(s) in the Output Window of Visual Studio .NET.

4.

Click Retrieve_Records and then click Go. The Retrieve_Records procedure extracts the records from the tables and displays them in the Output window, similar to this:

EmployeeData:=============AAA Andrew 12/4/1955

InventoryData:==============Cola 200 1.35Chips 550 0.89

5.

Click Add_Records and then click Go. The Add_Records routine adds two records to each table:

Click Update_Individual_Cells and then click Go. The Update_Individual_Cells routine modifies specific cells on the EmployeeData worksheet in ExcelData1.xls; specifically, cells F3, G3, and I4 are updated.

8.

Click Use_External_Source and then click Go. When you use an INSERT..INTO command, the Use_External_Source routine appends records from the Northwind table 'Employees' to the EmployeeData worksheet in ExcelData1.xls. And, Use_External_Source uses a SELECT..INTO command to create a new table (or sheet) in ExcelData2.xls that contains all of the records from the Northwind table 'Products'.

NOTE: If you click Use_External_Source more than one time, the Employees list will be appended multiple times because the primary key is not recognized or enforced.

Cell Formatting

If you are using ADO.NET to add or update records in an existing workbook, you can apply cell formatting to the workbook that will be used with the new or updated records. When you update an existing record (or row) in a workbook, the cell formatting is retained. And when you insert a new record (or row) in a workbook, the new record inherits formatting from the row above it.

The following procedure shows how you can use formatting in a workbook with the sample code:

1.

Press F5 to build and run the sample.

2.

On Form1, click Create_Workbook and then click Go.

3.

Start Microsoft Excel and open C:ExcelData1.xls.

4.

Apply a bold font style to cell A2.

5.

Apply an italic, underline style to cell B2 and align center.

6.

Apply a long date format to cell C2.

7.

Save and close C:ExcelData1.xls.

8.

On Form1, click Add_Records and then click Go.

9.

Open C:ExcelData1.xls in Excel and notice that the two new rows have inherited the formatting from the first row

Limitations

The following are some limitations of the Jet OLE DB Provider in regard to Excel data sources:

•

You cannot insert formulas in cells using ADO.NET.

•

The Jet OLE DB Provider is unable to provide key/index information for tables in an Excel workbook. For this reason, you cannot use the CommandBuilder to automatically generate updates and insertions for records in an Excel workbook.

Those who have a GMail account probably recognize its similarity to the attachment feature when composing new email. Since Gmail’s javascript seems to be hidden… or scrambled… or… whatever they did to it, I was left in the dark trying to figure this one out on my own.

The hidden input element simply gives you a chance to dynamically call a number you could start with. This, for instance could be set with PHP or ASP. The onclick event handler is used to call the function. Lastly, the div element is set and ready to receive some children appended unto itself (gosh that sounds wierd).

The addElement function sets a variable by grabbing the element of which we will append a child node to. So in this case, we use the classic getElementById method to track it down. We of course supply the empty ‘myDiv’.

The next three lines basically grab the value of the hidden input element and give your function a starting number to begin with. Then each time the function is called, your value is incremented. This is important for when you need to remove elements, since you’ll need unique id’s.

You’ll notice next the createElement is used to… well… make a new div element. But wait, it needs an id. Thus, we use the setAttribute method to append an id and a value to it. At this point, we have the uniquely named divIdName and we will plug that into the equation for our newdiv object.

Now you’re ready for some content garbagio to put inside your dynamic div element using the innerHTML property. And this is when it gets fun. Within your HTML supplied in the innerHTML of the dynamically created div element, you need to provide a link to remove itself. Afterall, that’s the point of this whole thing, right? It wouldn’t be flexible if all we could do is only add and not remove.

So, a link is put inside with an event handler that calls the function removeElement. Great. Simple enough. Let’s move onto that function.

Okay, now that is easy. First off, it grabs the same parent div element by using getElementById and stores it in a variable. We then get the element to which we passed in as an argument to the function (which was created from the addEvent function), and we store that in another variable. Then voila! We remove like so: