views:

118

answers:

2

I declared a DataGrid in a ASP.NET View and I'd like to generate some C# code to populate said DataGrid with an Excel spreadsheet (.xlsx). Here's the code I have:

<asp:DataGrid id="DataGrid1" runat="server"/>
        <script language="C#" runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\FileName.xlsx;Extended Properties=""Excel 12.0;HDR=YES;""";
                // Create the connection object
                OleDbConnection oledbConn = new OleDbConnection(connString);
                try
                {
                    // Open connection
                    oledbConn.Open();

                    // Create OleDbCommand object and select data from worksheet Sheet1
                    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [sheetname$]", oledbConn);

                    // Create new OleDbDataAdapter
                    OleDbDataAdapter oleda = new OleDbDataAdapter();

                    oleda.SelectCommand = cmd;

                    // Create a DataSet which will hold the data extracted from the worksheet.
                    DataSet ds = new DataSet();

                    // Fill the DataSet from the data extracted from the worksheet.
                    oleda.Fill(ds, "Something");

                    // Bind the data to the GridView
                    DataGrid1.DataSource = ds.Tables[0].DefaultView;
                    DataGrid1.DataBind();
                }
                catch
                {
                }
                finally
                {
                    // Close connection
                    oledbConn.Close();
                }
            }
        </script>

When I run the website, nothing really happens. What gives?

+1  A: 

Are you sure the JET OleDB driver is available on the machine in question? Is the application running as a 64 bit application (my understanding is that the JET driver will not work from 64 bit applications)?

SpreadsheetGear for .NET can do it. You can see live ASP.NET DataGrid samples here and more ASP.NET samples here.

You can download the free trial here if you want to try it yourself.

Disclaimer: I own SpreadsheetGear LLC

Joe Erickson
+3  A: 

The old JET driver does not yet support the XLSX format, only the BIFF (XLS) format.

You'll need somthing like this for your connection string:

 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\FileName.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=2"

You'll also need to download and install this on your web server:

http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&amp;displaylang=en

richardtallent