Updating data in to a Excel sheet using c# - c#

I am trying to update some data in an Excel sheet of the format "xlsx" using OLEDB connection, but I am unable to make out the connection establishment.
Here is my code:
String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" + "D:\abc1.xlsx" + "';Extended Properties='Excel 8.0;HDR=Yes'";
OleDbConnection con = new OleDbConnection(sConnectionString);
con.Open();
OleDbCommand com = new OleDbCommand("select * from Sheet1",con);
OleDbDataReader reader = null;
reader = com.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader[0]);
}
con.Open();
Console.ReadLine();
}
When I run the code, I'm facing the following exception:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local
machine.
Any idea how to recover from this exception or any other suggestions from which i can update my data in excel is advisable.

This could be the provider you have stated try changing it to the one which matches the Excel version on your machine
Try
Provider=Microsoft.ACE.OLEDB.12.0;Data Source='D:\abc1.xlsx';Extended Properties="Excel 12.0 Xml;HDR=YES";
Instead
Could also be that excel isnt installed
Also check that you have referenced the OLEDB library for your project

Change your PlatformTarget Type from AnyCPU to X86.
Steps:
Goto Project Properties.
Select Build tab.
Select X86 from PlatformTarget options.

It is possible that there are multiple reasons for this exception.
1) You could use the OleDbEnumerator class to find out what providers are available.
Accordingly you set your connection string.
2) Before that just try out below connection string.
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + "D:\abc1.xlsx" + "';Extended Properties='Excel 8.0;HDR=Yes'";
3) If you have a 64 bit OS, there is no 64-bit version of the JET provider available and there's no alternative. As long as you want to support JET, you'll need to set the build target to x86.

first save as your excel workbook as Excel 97-2003 Workbook
It will work in my project...
string filepath = Server.MapPath("~/ImportData/") + fileUpload.FileName;
OleDbConnection oconn = new OleDbConnection
(#"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";
Extended Properties=Excel 8.0");`
oconn.Open();
OleDbDataAdapter adp = new OleDbDataAdapter("select * from Sheet1", oconn);
DataSet ds = new DataSet();
adp.Fill(ds);
oconn.Close();`

Related

IErrorInfo.GetDescription failed with E_FAIL(0x80004005) in asp.net c#?

I am trying to read an excel file and convert the contents of the file to a datatable but I keep getting this exception IErrorInfo.GetDescription failed with E_FAIL(0x80004005) pointing at a specific line POCCommand.Fill(dt);This is what I tried so far. What could I be doing wrong ?
string POCpath = #"p.xlsx";
string POCConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + POCpath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";
OleDbConnection POCcon = new OleDbConnection(POCConnection);
OleDbCommand POCcommand = new OleDbCommand();
DataTable dt = new DataTable();
OleDbDataAdapter POCCommand = new OleDbDataAdapter("select * from [Sheet1$] ", POCcon);
POCCommand.Fill(dt);
Console.WriteLine(dt.Rows.Count);
First, since you're using .NET, you need to wrap anything that inherits or implements from IDisposable into a using statement.
such as:
using (OleDbConnection connection = new OleDbConnection("connectionstring")){
//Do stuff here
}
Second:
Please refer to this great answer by MethodMan on this SO Answer.
It has everything you will need to know. He does both OleDb connections and a TextFieldParser which will be faster and less expensive.

data source folder on other device

we have data stored in an Excel file (Trail_Test.xls), which is stored in the Resources folder of our C# project.
now we need to load data from that xls file to dataGridView on the windows form application we have.
This is the code we use
System.Data.OleDb.OleDbConnection MyConnection;
System.Data.DataSet DtSet;
System.Data.OleDb.OleDbDataAdapter MyCommand;
string path = System.AppDomain.CurrentDomain.BaseDirectory + #"Resources\Trail_Test.xls";
MyConnection = new System.Data.OleDb.OleDbConnection(#"provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + path + "';Extended Properties=Excel 8.0;");
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [20$]", MyConnection);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
dataGridView1.Columns.Clear();
dataGridView1.DataSource = DtSet.Tables[0];
This gives an error on the 8th line:
The Microsoft Jet database engine could not find the object '20$'. Make sure the object exists and that you spell its name and the path name correctly.
any help ??
thanks
The path has to be relative to the executable. For example if the executable is in
C:\Users\Adham\Documents\Visual Studio 2010\Projects\Curve Fitting\Curve Fitting\
then the path to the .xls file will be
string path = System.AppDomain.CurrentDomain.BaseDirectory + #"Resources\Trail_Test.xls";
string connectionString = #"provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + path + "';Extended Properties=Excel 8.0;"
Your MyConnection object includes
Data Source='C:\Users\Adham\Documents\Visual Studio 2010\Projects\Curve Fitting\Curve Fitting\Resources\Trail_Test.xls
that looks like something that should not be hardcoded and will cause problems when executed on any other computer but Adham's.
Try this: Make sure that the file is marked as "Copy to output directory=copy if newer", just right click on it and see "properties"
you should reach the installition folder. It will depends on your project type. There is an answer to reach Resources folder for a c# project
https://stackoverflow.com/a/27182028/3209523

Format of the initialization string does not conform to the OLE DB specification

I'm getting the following error when trying to read an Excel file using a third-party component
Format of the initialization string does not conform to the OLE DB specification
Now, I know the words "third party component" are going to set off alarm bells here, but hear me out.
Here's the connection string I'm using
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=C:\users\rory\downloads\testdb_4.xls;
Extended Properties='Excel 8.0;HDR=YES;';
I've got this exact connection string to work no problem with the following C# code
using (OleDbConnection conn = new OleDbConnection())
{
DataTable dt = new DataTable();
conn.ConnectionString = connstring;
using (OleDbCommand comm = new OleDbCommand())
{
comm.CommandText = "select * from [TEST_DB$]";
// TEST_DB is the name of the sheet
comm.Connection = conn;
using (OleDbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = comm;
da.Fill(dt);
// do stuff with dt
}
}
}
This works as expected, and the datatable is filled with data from the Excel file. However when I try to access it from the component, I get the error above.
I'm not an expert on OLE DB, but I was under the impression that the drivers are at the OS level and if they work for one app / connection string they should work for all apps with that same connection string. Am I wrong? And if so, does anyone have a clue what's going on here?
I have contacted support for the component.
The solution to this ended up being to replace the single quotes with escaped doubles.
string conn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=C:\users\rory\downloads\testdb_4.xls;" +
"Extended Properties='Excel 8.0;HDR=YES;'"; // single quotes
became
string conn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=C:\users\rory\downloads\testdb_4.xls;" +
"Extended Properties=\"Excel 8.0;HDR=YES;\""; // escaped double quotes
OleDbConnection had no problem with single quotes but apparently some apps and components do.

xlsx file upload not working correctly - works when file is open but not when closed

I've been doing research on this problem for about a day and a half and haven't found a solution to my problem yet. This is my scenario:
I have a AsyncFileUpload and a button which is configured to accept only xls and xlsx files (Excel) file. This file that is uploaded is used to import information into a gridview. The old format xls files works fine. The problem comes when I want to upload the xlsx file. I've tested multiple scenarios and I have found that it works perfectly when the xlsx file is currectly/actively open. When it is closed it gives me errors. I have fiddled and explored solutions to this problem and the range of errors I have received is quite large. But the most prominent errors where the following:
1. External table is not in the expected format.
2. could-not-find-installable-isam
I have found an article relating to the second error (Could not find installable ISAM) but I haven't tried all the suggested solutions yet because I would rather avoid making changes to the windows registry because I do not have exstensive knowledge regarding this matter.
I'm attaching the code that I use to make the connection between the OleDb and the excel file:
protected void AsyncUpload_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
string connString = "";
string strFileType = Path.GetExtension(e.FileName).ToLower();
string path = e.FileName;
////Connection String to Excel Workbook
if (strFileType.Trim() == ".xls")
{
connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
}
else if (strFileType.Trim() == ".xlsx")
{
connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;HDR=Yes;IMEX=1";
}
string query = "SELECT * FROM [sheet1$]";
OleDbConnection conn = new OleDbConnection(connString);
if (conn.State == ConnectionState.Closed)
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
using (OleDbDataReader dr = cmd.ExecuteReader())
{
_InsertWrapper.clearLists();
while (dr.Read())
{
var row1Col0 = dr[0];
Console.WriteLine(row1Col0);
_InsertWrapper.GenerateList(dr);
}
}
da.Dispose();
conn.Close();
conn.Dispose();
InventoryGrid.DataBind();
ErrorsGrid.DataBind();
}
If someone has additional knowledge or an explanation that can contribute please add it so that more people that are struggling with the same type of problem can gain as much information from this question as possible.We are all still learning.
So, main idea: Need to find a solution to successfully upload the xlsx file
Try using third party tools. They work efficiently:
http://code.google.com/p/excellibrary/

OleDBConnection Connection string

When I try this code OleDBConnection.open() not work and didn't throw any error, just open windows form and say anything I see messageBox try1 but program didn't show try2 what is the wrong in my connection string please help I've tried also excel 12.0 but it looks in reference Excel 14.0 in References (Microsoft Excel 14.0 Object Library) and the file is exist in c:\product.xlsx
OleDbConnection conn_exel = new OleDbConnection(#"provider=Microsoft.Jet.OLEDB.12.0; Data Source=C:\product.xlsx; Extended Properties=""Excel 14.0;HDR=Yes;""");
conn_exel.Open();
MessageBox.Show("try2");
OleDbCommand command_exel = new OleDbCommand(#"SELECT * FROM [Sayfa1$] WHERE id = 1",conn_exel);
OleDbDataReader reader_exel = command_exel.ExecuteReader();
MessageBox.Show("try3");
while (reader_exel.Read())
{
MessageBox.Show(reader_exel.GetString(1));
}
conn_exel.Close();
Try like this
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES";
"HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.
reference
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PathNam + ";
Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"
http://www.nullskull.com/q/10173180/hello-would-you-explain-imex-option-when-import-excel.aspx
for IMEX usage

Categories