C# - Project Deployment (ClickOnce) - c#

I did a project and I used Visual Studio 2017 (Microsoft .NET Framework 4.6.1) - (Windows Form Applications) and SQL Server 2012 Express LocalDB for database operations.
I will run this project on clients' computers. As you can imagine, customers are not interested in database, software, etc. For this purpose, without making any installation on their computers, I'll just make the project work by giving the project file. This is my FIRST comprehensive project.
When I choose deployment attributes in "publish", "prerequisities" I ticked "Microsoft .NET Framework 4.6.1 (x86 and x64) and SQL Server 2012 Express LocalDB and I published it with "Download prerequisites from the component vendor's web site.". I test my software and it works fine.
But when I choose "Download prerequisites from the same location as my application", it fails. I researched it on internet but I couldn't find any clear information. I want the user to download the prerequisites from my software file, so I want to choose "Download prerequisites from the same location as my application". I have "SqlCmdLnUtils.msi", "SqlLocalDB.msi", "sqlncli.msi" for both x86 and x64, and I have "NDP461-KB3102436-x86-x64-AllOS-ENU". I think I need to add the installers on my own computer to be able to do "Download prerequisites from the same location as my application".
But I don't know where I should add these installers in "C: \ Program Files (x86) \ Microsoft SDKs" or "C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ SDK".

You are right, you have to download the packages first on your development computer.
By default, the path is %ProgramFiles(x86)%\Microsoft SDKs\ClickOnce Bootstrapper\Packages\
All the steps that are necessary to offer prerequisites from the same location as your application are described here.

Related

Visual Studio 2019 connecting to Access Database - Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine [duplicate]

I'm trying to get data from an Excel file on a button click event. My connection string is:
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";
When I click on the button, I got the following error:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
I have no clue how to fix this. My operating system is Windows 7.
Well, you need to install it. You're looking for:
The 2007 Office System Driver: Data Connectivity Components.
A 64-bit version of the 'Microsoft Access Database Engine 2010 Redistributable' that will allow you to use the 'Microsoft.ACE.OLEDB.12.0' provider is available here:
http://www.microsoft.com/en-us/download/details.aspx?id=13255
If you use the download from the accepted answer, you will need to build for x86, as pointed out by #backtestbroker.com.
depending on the app(32/64bit) using the connection you could just install
Access 2007 engines (only 32bit)
Access 2010 (32&64bit)
Access 2013 full runtime (32&64bit ! >200mb)
Access 2016 runtime
Access 2019 runtime
Summary:
all offices from 2007-2016 contain the provider "Microsoft.ACE.Oledb.12.0"
depending on your application architecture choose the appropriate runtime engine (32/64)6
check your providers with the powershell-command from both 32 and 64bit shell:
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
and you will see which provider your system can use
the long story:
the strings can be found with http://live.sysinternals.com/strings.exe
eg. on a 64bit System with 32bit drivers installed
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"
even in the upcoming office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL
you will find the strings
Microsoft.ACE.OLEDB
Microsoft.ACE.Oledb.12.0
the Office 2013 comes also with csi.dll
c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll
which contains the "Microsoft.ACE.OLEDB.15.0"
and Office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll
which has the "Microsoft.ACE.OLEDB.16.0" version
The first thing you need to check is your build configuration of your application.
If you have built your project under x86 platform, then in order to
resolve you issue you should install the following packages on your
machine:
In order to use the 'Microsoft.ACE.OLEDB.12.0' provider you must
install the Microsoft Access Database Engine 2010 Redistributable
first, this installation is available at:
http://www.microsoft.com/download/en/details.aspx?id=13255 .
After the installation has complete, try running you application, if this
solves the issue great, if not, continue to step 2.
This next step is an unexplained workaround, which works for Office
2010, even though it is the Data Connectivity Components of Office 2007. I am not quite sure why this works, but it does and this has been proven to work in almost all cases. You need to install the 2007 Office System Driver: Data Connectivity Components, this installation is available at:
http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .
After this installation is complete, try running your application, this should resolve the issue.
If you are trying to run an application built under x64 or AnyCPU
platform, I would recommend first validating that it runs as expected
under the x86 platform. In the event that it does not run under that
x86 platform, perform the steps in the first part and validate that
it runs as expected.
I did read that the MS Access drivers including the OLEDB Database
driver works only under the x86 platform and is incompatible under
the x64 or AnyCPU platform. But this appears to be untrue. I
validated my application was running when building x86, then I
installed the Access Database Engine using the passive flag.
First download the file locally You can download the installation
here: http://www.microsoft.com/en-us/download/details.aspx?id=13255
Installing using the command prompt with the '/passive' flag. In
the command prompt run the following command:
'AccessDatabaseEngine_x64.exe /passive'
After these 2 steps I managed to run my application after building in
x64 or AnyCPU build configuration. This appeared to solve my issue.
Note: The order of the steps seems to make a difference, so please follow accordingly.
I got this error/exception in Visual Studio 2010 when I changed my build in the Configuration Manager dialog box from "x86" to "Any CPU". This OLEDB database driver I understand only works in x86 and is not 64bit compatible. Changing the build configuration back to x86 solved the problem for me.
I installed the MS drivers and it still didn't work for me. Then I found this blog post that solved the issue. Read it there, else use these two images (linked from that post) as the TLDR sumamary:
Although many answers have been given, the problem I encountered was not yet mentioned.
My Scenario: 64-Bit Application, Win10-64, Office 2007 32-Bit installed.
Installation of the 32-Bit Installer AccessDatabaseEngine.exe as downloaded from MS
reports success, but is NOT installed, as verified with the Powershell
Script of one of the postings above here.
Installation of the 64-Bit installer AccessDatabaseEngine_X64.exe reported a shocking error message:
The very simple solution has been found here on an Autodesk site.
Just add the parameter /passive to the commandline string, like this:
AccessDatabaseEngine_X64.exe /passive
Installation successful, the OleDb driver worked.
The Excel files I am processing with OleDb are of xlsx type, produced with EPPlus 4.5 and modified with Excel 2007.
For all those still affected by this.
I've been getting the error...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
...as described by the OP, Shailesh Sahu.
I have 64bit Windows 7.
My problem is within PowerShell scripts, but is using a connection string, similar to the OP's post, so hopefully my findings can be applied to C#, PowerShell and any other language relying on the "Microsoft.ACE.OLEDB" driver.
I followed instructions on this MS forum thread: http://goo.gl/h73RmI
I first tried installing the 64bit version, then installing the 32bit version of the AccessDatabaseEngine.exe from this page
http://www.microsoft.com/en-us/download/details.aspx?id=13255
But still no joy.
I then ran the code below in PowerShell (from SQL Panda's site http://goo.gl/A3Hu96)
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
...which gave me this result (I've removed other data sources for brevity)...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
As you can see, I have Microsoft.ACE.OLEDB.15.0 (fifteen) not Microsoft.ACE.OLEDB.12.0 (twelve)
So, I amended my connection string to 15 and it worked.
So, a quick PowerShell snippet to demonstrate how to soft-code the version...
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
amended to pick the latest ACE version, if more than one
Hopefully, anyone finding this can now check to see what OLEDB version is installed and use the appropriate version number.
If you're using 64-bit but still having problem even after installing AccessDatabaseEngine, see this post, it solved the problem for me.
i.e. You need to install this AccessDatabaseEngine
You need to change the Solution Platform from "Any CPU" to "x86" or "x64" based on the bitness of office installation.
The steps are given below:
Right click on the Solution File in Solution Explorer:
Click on the Configuration Manager.
Click on the Active Platform Drop down, if x86 is already there then select that, else click on New.
Select x86 or x64 from the new platform dropdown:
Compile and run your application.
do this 2 steps:
in this menu: project -> yourproject properties... -> Build : uncheck "prefer 32-Bit"
in connectionString : write cuotes before and after Extended properties, like this: Extended Properties='Excel 12.0 Xml;HDR=YES'
var fileName = string.Format("{0}", openFileDialog1.FileName);
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, TableNmae);
DataTable data = ds.Tables[TableNmae];
dg1.DataSource = data;
I was able to fix this by following the steps in this article: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine
The key point for me was this:
When debugging with IIS,
by default, Visual Studio uses the 32-bit version. You can change this
from within Visual Studio by going to Tools » Options » Projects And
Solutions » Web Projects » General, and choosing
"Use the 64 bit version of IIS Express for websites and projects"
After checking that option, then setting the platform target of my project back to "Any CPU" (i had set it to x86 somewhere in the troubleshooting process), i was able to overcome the error.
If you are debugging a web project, just make sure IIS Express is running either in 32 or 64 bits depending on your project settings.
Goto
Tools > Options > Projects and Solutions > Web Projects
and from there check (or uncheck) the 'Use 64 bit version of IIS Express...'
If the installed "AccessDatabaseEngine" still does not help, below is solution:
You need to change the Active Solution Platform from "Any CPU" to "x86".
OLEDB Provider is Not Registered on the Local Machine
From CodeProject.com
First verify which version of microsoft.ace.oledb.12.0 is installed in your system.
Check in below path C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --64 bit is installed
Check in below path C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --x86 bit is installed
If (x86) is installed then using configuration manager change solution platform to x86, for x64 change to x64.
If not available then install using below link
https://www.microsoft.com/en-us/download/details.aspx?id=23734
A 64-bit version of the 'Microsoft Access Database Engine 2010 Redistributable' that will allow you to use the 'Microsoft.ACE.OLEDB.12.0' provider is available here:
http://www.microsoft.com/en-us/download/details.aspx?id=13255
If using VS 2012 or later, make sure that "Prefer 32-bit" checkbox is unchecked in the project's Properties => Build => General configuration
syp_dino,
The solution for me as you suggested for the "Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine" error is to change the Active Solution Platform from "Any CPU" to "x86".
When I performed those steps, rebuilt the solution, grabbed the EXE and placed in on the network, everything worked smoothly on the Windows 7 64 bit machine.
I faced this same problem. Go to the Solution Properties and change Any CPU to x86, I think it will do the job.
These configurations worked in January of 2020 on my new machine build:
(1 - x64 only) Windows 10 x64, Office 365 x64, AccessDatabaseEngine_x64 2016 installed with /passive argument, VStudio build settings set to x64 explicitly, with the following connection string: Provider= Microsoft.ACE.OLEDB.16.0; Data Source=D:...\MyDatabase.accdb
(2 - x64 or x32) Windows 10 x64, Office 365 x64, AccessDatabaseEngine_x64 2016 installed with /passive argument, PLUS AccessDatabaseEngine 2010 (32bit) installed with /passive argument, VStudio build settings set to AnyCPU, with the following connection string: Provider= Microsoft.ACE.OLEDB.16.0; Data Source=D:...\MyDatabase.accdb
(3 - x32 only) Windows 10 x64, Office 365 x32, AccessDatabaseEngine 2010 (32bit) installed with /passive argument, VStudio build settings set to x86, with the following connection string: Provider= Microsoft.ACE.OLEDB.12.0; Data Source=D:...\MyDatabase.accdb
FAILURE NOTES
Using the ACE.OLEDB.12.0 x64 provider in the connection string failed with only the AccessDatabaseEngine_x64 2016 installed as above in (1).
Using AnyCPU in the visual studio build settings failed in (1). Setting x64 is required. Maybe this is because AnyCPU means that Vstudio must see an x32 ACE.OLEDB.nn.0 provider at compile time.
The ACE.OLEDB.12.0 2016 x32 /passive engine would NOT install when it saw x64 applications around. (The ACE.OLEDB.12.0 2010 x32 /passive installer worked.)
CONCLUSIONS
To use x64 build settings, you need to have the 2016 x64 database engine AND the ACE.OLEDB.16.0 connection-string provider AND explicit x64 build settings to work with Office 365 in January of 2020. Using the /passive option makes installations easy. Credit to whoever posted that tip!
To use AnyCPU, I needed to have both the ACE.OLEDB.12.0 2010 x32 engine and the ACE.OLEDB.16.0 x64 engines installed. That way Vstudio could see both x32 and x64 engines at "AnyCPU" compile time. I could change the provider connection string to ACE.OLEDB.12.0 for x32 operation or to ACE.OLEDB.16.0 for x64 operation. Both worked fine.
To use x86 build settings, you need to have the 2010 x32 database engine AND the ACE.OLEDB.12.0 connection-string provider AND explicit x86 build settings to work with Office 365 x32 in January of 2020.
I have similar issue when we are reading Excel file.
History of the problem:
We recently migrated our application from 32-bit to 64-bit because of the memory requirement. For that we migrated our windows 7 from 32-bit to 64-bit. But still we installed 32-bit office on our machines.
because, of this we had this issue while importing Excel data into application.
Solution,
I downloaded 64-bit version of the http://www.microsoft.com/en-us/download/details.aspx?id=13255 and installed with argument as,
AccessDatabaseEngine_x64.exe /passive
Without any code change my issue get resolved.
Note:
On 64-bit OS and 64-bit office, my functionality was working fine without this fix. This fix is only required while our application is 64-bit running on 64-bit OS which is having 32-bit office installed on it.
I had this issue when attempting to import data from an excel file (xlsx) into a SQL Server DB using SSMS 2014.
The 2007 Office System Driver: Data Connectivity Components install did the trick for me.
I received this error when importing data from an Excel file into MS-SQL.
The provider was already installed (64-bit) and this surprised me why it didn't work.
So all I did was locate the Import/Export application used here i.e. the .EXE.
And I found it at
C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe
I then ran the .exe directly to perform the data import. And it worked!
I followed the instructions set out by others; installing this patch, installing that patch as well as the Microsoft Access Database Engine 2010.
My issue was that I'm using the same library (linq2sql) in 2 sites on my machine; 1 works and 1 doesn't.
Eventually I found that I had to "enable 32 bit applications" in the advanced settings of the apppool for my non-working site.
Everything works fine now.
Just download & install the following Access DB engine (X86 or X64: as per your machine configuration) and see the magic :)
https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255
If you get this error when trying to use ACE from an ASP.NET application, the most likely cause is that you have installed either one of the 32-bit versions. By default, IIS on a 64-bit operating system will run applications in a 64-bit worker process. 64-bit processes cannot load 32-bit DLLs. When a call is made to the ACE provider, the 64 bit process will attempt to locate a 64-bit DLL. If it doesn't exist, you get the error message that brought you here.
In this case you have two options. First, you can install the 2010 64-bit version. If you have the 2007 32-bit version installed, you can simply install the 2010 64-bit version alongside it. If you have the 32-bit version of 2010 installed, you need to uninstall it and download and install the 64-bit 2010 version instead. You cannot have both the 32- and 64-bit versions of the 2010 provider installed at the same time. If you are performing the installation on your development machine, you may also be constrained by the bit-ness of any existing Office installations.
The second option is to change the application pool in IIS to enable 32-bit applications. If you are using the full version of IIS, you can use the management tool to do this (Control Panel » Administrative Tools » Internet Information Services (IIS) Manager).
For more understanding please refer below link
for Visual Studio 2022 (and newer)
I had this error every time and it didn't help anything. VS2019 was the solution.
https://learn.microsoft.com/en-us/visualstudio/data-tools/accessing-data-in-visual-studio?view=vs-2022#data-providers
If you're using Visual Studio 2022 to connect to databases, you will
need to be aware that Visual Studio 2022 is a 64-bit process. This
means some of the data tools in Visual Studio will not be able to
connect to OLEDB or ODBC databases using 32-bit data providers.
If you need to maintain 32-bit applications that connect to OLEDB or
ODBC databases, you will still be able to build and run the
application with Visual Studio 2022. However, if you need to use any
of the Visual Studio Data Tools such as Server Explorer, Data Source
Wizard, or the DataSet Designer, you will need to use an earlier
version of Visual Studio that is still a 32-bit process. The last
version of Visual Studio that was a 32-bit process was Visual Studio
2019.
also can try these steps
In the SQL Server,
1.Open one data base
2.Clic in the option 'Server Obtect'
3.Clic in 'Linked Servers'
4.Clic in 'Providers'
5.Clic Rigth in 'Microsoft.ACE.OLEDB.12.0'
6.Uncheck all the options and close
I had the same issue but in this case microsoft-ace-oledb-12-0-provider was already installed on my machine and working fine for other application developed.
The difference between those application and the one with I had the problem was the Old Applications were running on "Local IIS" whereas the one with error was on "IIS Express(running from Visual Studio").
So what I did was-
Right Click on Project Name.
Go to Properties
Go to Web Tab on the right.
Under Servers select Local IIS and click on Create Virtual Directory button.
Run the application again and it worked.
I had Microsoft Access Database Engine 2010 Redistributable already installed on my machine but was still receiving the Microsoft ACE OLEDB Provider error.
Then I recalled that I had upgraded to Office 2016 recently, so, may be I should try reinstalling Microsoft Access Database Engine 2010 Redistributable. And that fixed the problem on my machine.
So, if you have upgraded to different version of MS Office or even repaired/reinstalled your MS Office then try reinstalling Microsoft Access Database Engine 2010 Redistributable before wasting time with finding other fixes. Good luck!
1.) Verify your connection string with ConnectionStrings.com.
2.) Make sure you have the correct database engine installed. These were the two database engines that helped me.
Microsoft Access Database Engine 2010 Redistributable
2007 Office System Driver: Data Connectivity Components
3.) There could be an issue with your build target platform being "Any CPU", it may need to be "X86" (Properties, Build, Platform Target).

c# Make sure that the path name is spelled correctly and that you are connected to the server [duplicate]

I'm trying to get data from an Excel file on a button click event. My connection string is:
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\source\\SiteCore65\\Individual-Data.xls;Extended Properties=Excel 8.0;";
When I click on the button, I got the following error:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
I have no clue how to fix this. My operating system is Windows 7.
Well, you need to install it. You're looking for:
The 2007 Office System Driver: Data Connectivity Components.
A 64-bit version of the 'Microsoft Access Database Engine 2010 Redistributable' that will allow you to use the 'Microsoft.ACE.OLEDB.12.0' provider is available here:
http://www.microsoft.com/en-us/download/details.aspx?id=13255
If you use the download from the accepted answer, you will need to build for x86, as pointed out by #backtestbroker.com.
depending on the app(32/64bit) using the connection you could just install
Access 2007 engines (only 32bit)
Access 2010 (32&64bit)
Access 2013 full runtime (32&64bit ! >200mb)
Access 2016 runtime
Access 2019 runtime
Summary:
all offices from 2007-2016 contain the provider "Microsoft.ACE.Oledb.12.0"
depending on your application architecture choose the appropriate runtime engine (32/64)6
check your providers with the powershell-command from both 32 and 64bit shell:
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
and you will see which provider your system can use
the long story:
the strings can be found with http://live.sysinternals.com/strings.exe
eg. on a 64bit System with 32bit drivers installed
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\MSO.DLL" | findstr "ACE.O"
strings.exe -u -n 10 "c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSO.DLL" | findstr "ACE.O"
even in the upcoming office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\MSO.DLL
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL
you will find the strings
Microsoft.ACE.OLEDB
Microsoft.ACE.Oledb.12.0
the Office 2013 comes also with csi.dll
c:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\Csi.dll
c:\Program Files\Common Files\Microsoft Shared\OFFICE15\Csi.dll
which contains the "Microsoft.ACE.OLEDB.15.0"
and Office 2016
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX64\Microsoft Shared\OFFICE16\Csi.dll
c:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\Csi.dll
which has the "Microsoft.ACE.OLEDB.16.0" version
The first thing you need to check is your build configuration of your application.
If you have built your project under x86 platform, then in order to
resolve you issue you should install the following packages on your
machine:
In order to use the 'Microsoft.ACE.OLEDB.12.0' provider you must
install the Microsoft Access Database Engine 2010 Redistributable
first, this installation is available at:
http://www.microsoft.com/download/en/details.aspx?id=13255 .
After the installation has complete, try running you application, if this
solves the issue great, if not, continue to step 2.
This next step is an unexplained workaround, which works for Office
2010, even though it is the Data Connectivity Components of Office 2007. I am not quite sure why this works, but it does and this has been proven to work in almost all cases. You need to install the 2007 Office System Driver: Data Connectivity Components, this installation is available at:
http://www.microsoft.com/download/en/confirmation.aspx?id=23734 .
After this installation is complete, try running your application, this should resolve the issue.
If you are trying to run an application built under x64 or AnyCPU
platform, I would recommend first validating that it runs as expected
under the x86 platform. In the event that it does not run under that
x86 platform, perform the steps in the first part and validate that
it runs as expected.
I did read that the MS Access drivers including the OLEDB Database
driver works only under the x86 platform and is incompatible under
the x64 or AnyCPU platform. But this appears to be untrue. I
validated my application was running when building x86, then I
installed the Access Database Engine using the passive flag.
First download the file locally You can download the installation
here: http://www.microsoft.com/en-us/download/details.aspx?id=13255
Installing using the command prompt with the '/passive' flag. In
the command prompt run the following command:
'AccessDatabaseEngine_x64.exe /passive'
After these 2 steps I managed to run my application after building in
x64 or AnyCPU build configuration. This appeared to solve my issue.
Note: The order of the steps seems to make a difference, so please follow accordingly.
I got this error/exception in Visual Studio 2010 when I changed my build in the Configuration Manager dialog box from "x86" to "Any CPU". This OLEDB database driver I understand only works in x86 and is not 64bit compatible. Changing the build configuration back to x86 solved the problem for me.
I installed the MS drivers and it still didn't work for me. Then I found this blog post that solved the issue. Read it there, else use these two images (linked from that post) as the TLDR sumamary:
Although many answers have been given, the problem I encountered was not yet mentioned.
My Scenario: 64-Bit Application, Win10-64, Office 2007 32-Bit installed.
Installation of the 32-Bit Installer AccessDatabaseEngine.exe as downloaded from MS
reports success, but is NOT installed, as verified with the Powershell
Script of one of the postings above here.
Installation of the 64-Bit installer AccessDatabaseEngine_X64.exe reported a shocking error message:
The very simple solution has been found here on an Autodesk site.
Just add the parameter /passive to the commandline string, like this:
AccessDatabaseEngine_X64.exe /passive
Installation successful, the OleDb driver worked.
The Excel files I am processing with OleDb are of xlsx type, produced with EPPlus 4.5 and modified with Excel 2007.
For all those still affected by this.
I've been getting the error...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
...as described by the OP, Shailesh Sahu.
I have 64bit Windows 7.
My problem is within PowerShell scripts, but is using a connection string, similar to the OP's post, so hopefully my findings can be applied to C#, PowerShell and any other language relying on the "Microsoft.ACE.OLEDB" driver.
I followed instructions on this MS forum thread: http://goo.gl/h73RmI
I first tried installing the 64bit version, then installing the 32bit version of the AccessDatabaseEngine.exe from this page
http://www.microsoft.com/en-us/download/details.aspx?id=13255
But still no joy.
I then ran the code below in PowerShell (from SQL Panda's site http://goo.gl/A3Hu96)
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
...which gave me this result (I've removed other data sources for brevity)...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
As you can see, I have Microsoft.ACE.OLEDB.15.0 (fifteen) not Microsoft.ACE.OLEDB.12.0 (twelve)
So, I amended my connection string to 15 and it worked.
So, a quick PowerShell snippet to demonstrate how to soft-code the version...
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
amended to pick the latest ACE version, if more than one
Hopefully, anyone finding this can now check to see what OLEDB version is installed and use the appropriate version number.
If you're using 64-bit but still having problem even after installing AccessDatabaseEngine, see this post, it solved the problem for me.
i.e. You need to install this AccessDatabaseEngine
You need to change the Solution Platform from "Any CPU" to "x86" or "x64" based on the bitness of office installation.
The steps are given below:
Right click on the Solution File in Solution Explorer:
Click on the Configuration Manager.
Click on the Active Platform Drop down, if x86 is already there then select that, else click on New.
Select x86 or x64 from the new platform dropdown:
Compile and run your application.
do this 2 steps:
in this menu: project -> yourproject properties... -> Build : uncheck "prefer 32-Bit"
in connectionString : write cuotes before and after Extended properties, like this: Extended Properties='Excel 12.0 Xml;HDR=YES'
var fileName = string.Format("{0}", openFileDialog1.FileName);
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties='Excel 12.0 Xml;HDR=YES'", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, TableNmae);
DataTable data = ds.Tables[TableNmae];
dg1.DataSource = data;
I was able to fix this by following the steps in this article: http://www.mikesdotnetting.com/article/280/solved-the-microsoft-ace-oledb-12-0-provider-is-not-registered-on-the-local-machine
The key point for me was this:
When debugging with IIS,
by default, Visual Studio uses the 32-bit version. You can change this
from within Visual Studio by going to Tools » Options » Projects And
Solutions » Web Projects » General, and choosing
"Use the 64 bit version of IIS Express for websites and projects"
After checking that option, then setting the platform target of my project back to "Any CPU" (i had set it to x86 somewhere in the troubleshooting process), i was able to overcome the error.
If you are debugging a web project, just make sure IIS Express is running either in 32 or 64 bits depending on your project settings.
Goto
Tools > Options > Projects and Solutions > Web Projects
and from there check (or uncheck) the 'Use 64 bit version of IIS Express...'
If the installed "AccessDatabaseEngine" still does not help, below is solution:
You need to change the Active Solution Platform from "Any CPU" to "x86".
OLEDB Provider is Not Registered on the Local Machine
From CodeProject.com
First verify which version of microsoft.ace.oledb.12.0 is installed in your system.
Check in below path C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --64 bit is installed
Check in below path C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL --x86 bit is installed
If (x86) is installed then using configuration manager change solution platform to x86, for x64 change to x64.
If not available then install using below link
https://www.microsoft.com/en-us/download/details.aspx?id=23734
A 64-bit version of the 'Microsoft Access Database Engine 2010 Redistributable' that will allow you to use the 'Microsoft.ACE.OLEDB.12.0' provider is available here:
http://www.microsoft.com/en-us/download/details.aspx?id=13255
If using VS 2012 or later, make sure that "Prefer 32-bit" checkbox is unchecked in the project's Properties => Build => General configuration
syp_dino,
The solution for me as you suggested for the "Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine" error is to change the Active Solution Platform from "Any CPU" to "x86".
When I performed those steps, rebuilt the solution, grabbed the EXE and placed in on the network, everything worked smoothly on the Windows 7 64 bit machine.
I faced this same problem. Go to the Solution Properties and change Any CPU to x86, I think it will do the job.
These configurations worked in January of 2020 on my new machine build:
(1 - x64 only) Windows 10 x64, Office 365 x64, AccessDatabaseEngine_x64 2016 installed with /passive argument, VStudio build settings set to x64 explicitly, with the following connection string: Provider= Microsoft.ACE.OLEDB.16.0; Data Source=D:...\MyDatabase.accdb
(2 - x64 or x32) Windows 10 x64, Office 365 x64, AccessDatabaseEngine_x64 2016 installed with /passive argument, PLUS AccessDatabaseEngine 2010 (32bit) installed with /passive argument, VStudio build settings set to AnyCPU, with the following connection string: Provider= Microsoft.ACE.OLEDB.16.0; Data Source=D:...\MyDatabase.accdb
(3 - x32 only) Windows 10 x64, Office 365 x32, AccessDatabaseEngine 2010 (32bit) installed with /passive argument, VStudio build settings set to x86, with the following connection string: Provider= Microsoft.ACE.OLEDB.12.0; Data Source=D:...\MyDatabase.accdb
FAILURE NOTES
Using the ACE.OLEDB.12.0 x64 provider in the connection string failed with only the AccessDatabaseEngine_x64 2016 installed as above in (1).
Using AnyCPU in the visual studio build settings failed in (1). Setting x64 is required. Maybe this is because AnyCPU means that Vstudio must see an x32 ACE.OLEDB.nn.0 provider at compile time.
The ACE.OLEDB.12.0 2016 x32 /passive engine would NOT install when it saw x64 applications around. (The ACE.OLEDB.12.0 2010 x32 /passive installer worked.)
CONCLUSIONS
To use x64 build settings, you need to have the 2016 x64 database engine AND the ACE.OLEDB.16.0 connection-string provider AND explicit x64 build settings to work with Office 365 in January of 2020. Using the /passive option makes installations easy. Credit to whoever posted that tip!
To use AnyCPU, I needed to have both the ACE.OLEDB.12.0 2010 x32 engine and the ACE.OLEDB.16.0 x64 engines installed. That way Vstudio could see both x32 and x64 engines at "AnyCPU" compile time. I could change the provider connection string to ACE.OLEDB.12.0 for x32 operation or to ACE.OLEDB.16.0 for x64 operation. Both worked fine.
To use x86 build settings, you need to have the 2010 x32 database engine AND the ACE.OLEDB.12.0 connection-string provider AND explicit x86 build settings to work with Office 365 x32 in January of 2020.
I have similar issue when we are reading Excel file.
History of the problem:
We recently migrated our application from 32-bit to 64-bit because of the memory requirement. For that we migrated our windows 7 from 32-bit to 64-bit. But still we installed 32-bit office on our machines.
because, of this we had this issue while importing Excel data into application.
Solution,
I downloaded 64-bit version of the http://www.microsoft.com/en-us/download/details.aspx?id=13255 and installed with argument as,
AccessDatabaseEngine_x64.exe /passive
Without any code change my issue get resolved.
Note:
On 64-bit OS and 64-bit office, my functionality was working fine without this fix. This fix is only required while our application is 64-bit running on 64-bit OS which is having 32-bit office installed on it.
I had this issue when attempting to import data from an excel file (xlsx) into a SQL Server DB using SSMS 2014.
The 2007 Office System Driver: Data Connectivity Components install did the trick for me.
I received this error when importing data from an Excel file into MS-SQL.
The provider was already installed (64-bit) and this surprised me why it didn't work.
So all I did was locate the Import/Export application used here i.e. the .EXE.
And I found it at
C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTSWizard.exe
I then ran the .exe directly to perform the data import. And it worked!
I followed the instructions set out by others; installing this patch, installing that patch as well as the Microsoft Access Database Engine 2010.
My issue was that I'm using the same library (linq2sql) in 2 sites on my machine; 1 works and 1 doesn't.
Eventually I found that I had to "enable 32 bit applications" in the advanced settings of the apppool for my non-working site.
Everything works fine now.
Just download & install the following Access DB engine (X86 or X64: as per your machine configuration) and see the magic :)
https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255
If you get this error when trying to use ACE from an ASP.NET application, the most likely cause is that you have installed either one of the 32-bit versions. By default, IIS on a 64-bit operating system will run applications in a 64-bit worker process. 64-bit processes cannot load 32-bit DLLs. When a call is made to the ACE provider, the 64 bit process will attempt to locate a 64-bit DLL. If it doesn't exist, you get the error message that brought you here.
In this case you have two options. First, you can install the 2010 64-bit version. If you have the 2007 32-bit version installed, you can simply install the 2010 64-bit version alongside it. If you have the 32-bit version of 2010 installed, you need to uninstall it and download and install the 64-bit 2010 version instead. You cannot have both the 32- and 64-bit versions of the 2010 provider installed at the same time. If you are performing the installation on your development machine, you may also be constrained by the bit-ness of any existing Office installations.
The second option is to change the application pool in IIS to enable 32-bit applications. If you are using the full version of IIS, you can use the management tool to do this (Control Panel » Administrative Tools » Internet Information Services (IIS) Manager).
For more understanding please refer below link
for Visual Studio 2022 (and newer)
I had this error every time and it didn't help anything. VS2019 was the solution.
https://learn.microsoft.com/en-us/visualstudio/data-tools/accessing-data-in-visual-studio?view=vs-2022#data-providers
If you're using Visual Studio 2022 to connect to databases, you will
need to be aware that Visual Studio 2022 is a 64-bit process. This
means some of the data tools in Visual Studio will not be able to
connect to OLEDB or ODBC databases using 32-bit data providers.
If you need to maintain 32-bit applications that connect to OLEDB or
ODBC databases, you will still be able to build and run the
application with Visual Studio 2022. However, if you need to use any
of the Visual Studio Data Tools such as Server Explorer, Data Source
Wizard, or the DataSet Designer, you will need to use an earlier
version of Visual Studio that is still a 32-bit process. The last
version of Visual Studio that was a 32-bit process was Visual Studio
2019.
also can try these steps
In the SQL Server,
1.Open one data base
2.Clic in the option 'Server Obtect'
3.Clic in 'Linked Servers'
4.Clic in 'Providers'
5.Clic Rigth in 'Microsoft.ACE.OLEDB.12.0'
6.Uncheck all the options and close
I had the same issue but in this case microsoft-ace-oledb-12-0-provider was already installed on my machine and working fine for other application developed.
The difference between those application and the one with I had the problem was the Old Applications were running on "Local IIS" whereas the one with error was on "IIS Express(running from Visual Studio").
So what I did was-
Right Click on Project Name.
Go to Properties
Go to Web Tab on the right.
Under Servers select Local IIS and click on Create Virtual Directory button.
Run the application again and it worked.
I had Microsoft Access Database Engine 2010 Redistributable already installed on my machine but was still receiving the Microsoft ACE OLEDB Provider error.
Then I recalled that I had upgraded to Office 2016 recently, so, may be I should try reinstalling Microsoft Access Database Engine 2010 Redistributable. And that fixed the problem on my machine.
So, if you have upgraded to different version of MS Office or even repaired/reinstalled your MS Office then try reinstalling Microsoft Access Database Engine 2010 Redistributable before wasting time with finding other fixes. Good luck!
1.) Verify your connection string with ConnectionStrings.com.
2.) Make sure you have the correct database engine installed. These were the two database engines that helped me.
Microsoft Access Database Engine 2010 Redistributable
2007 Office System Driver: Data Connectivity Components
3.) There could be an issue with your build target platform being "Any CPU", it may need to be "X86" (Properties, Build, Platform Target).

ClickOnce cannot find its prerequisites while the files are at the place they have to be

I want to publish my application using ClickOnce with some prerequisites (.NET 4.5 and SQL Server Express).
I did as it says in How to: Include Prerequisites with a ClickOnce Application (note that the package folders were at v8.1A folder instead of v8A folder), but it still says it can't find the files. I've tried both Visual Studio 2013 and Visual Studio 2015 RC.
To enable 'Download prerequisites from the same location as my application' in the Prerequisites dialog box, you must download file 'DotNetFX45\dotNetFx45_Full_x86_x64.exe' for item 'Microsoft .NET Framework 4.5 (x86 and x64)' to your local machine. For more information, see http://go.microsoft.com/fwlink/?LinkId=239883.
To enable 'Download prerequisites from the same location as my application' in the Prerequisites dialog box, you must download file 'SqlExpress2012\SQLEXPR32_x86_ENU.EXE' for item 'SQL Server 2012 Express' to your local machine. For more information, see http://go.microsoft.com/fwlink/?LinkId=239883.
To enable 'Download prerequisites from the same location as my application' in the Prerequisites dialog box, you must download file 'SqlExpress2012\SQLEXPR_x64_ENU.EXE' for item 'SQL Server 2012 Express' to your local machine. For more information, see http://go.microsoft.com/fwlink/?LinkId=239883.
To enable 'Download prerequisites from the same location as my application' in the Prerequisites dialog box, you must download file 'DotNetFX40ClientKB2468871\dotNetFx40_Client_x86_x64.exe' for item 'Microsoft .NET Framework 4 Client Profile (x86 and x64) and Update for .NET Framework 4 (KB2468871)' to your local machine. For more information, see http://go.microsoft.com/fwlink/?LinkId=239883.
You have a very wrong idea about what is possible in a ClickOnce deployment. The canonical MSDN page is this one. High-lighting the most significant sections in that web page:
Impact to the user's computer. With Windows Installer deployment, applications often rely on shared components, with the potential for versioning conflicts; with ClickOnce deployment, each application is self-contained and cannot interfere with other applications.
Security permissions. Windows Installer deployment requires administrative permissions and allows only limited user installation; ClickOnce deployment enables non-administrative users to install and grants only those Code Access Security permissions necessary for the application.
Does not affect shared components or other applications: Yes
Installation of shared files: No
Installation to Global Assembly Cache: No
Installation for multiple users: No
Install time registry access: Limited
These intentional restrictions were designed to make users feel good about installing .NET programs with ClickOnce. They don't need assistance from an administrator to get the program installed. And the installer cannot make drastic changes to the machine, the kind that cause other programs to malfunction. A very, very common problem with installers.
This is grossly incompatible with what you are trying to do. Both the .NET Framework and SQL Express are shared components and do require administrator access to install and do risk destabilizing a machine that already has .NET or SQL server installed.
So this simply cannot work. You can select them as Prerequisites but all that happens at install time is that the ClickOnce installer verifies that they are met. In other words, the machine must already have the correct versions of .NET and SQL Express installed. If it doesn't then the deployment will fail and the user gets the dialog that tells him where to download the installer. It is then entirely up to him (or his administrator) to download and run the installer. After which your ClickOnce install completes without trouble.
The deployment wizard is fairly crummy, it should have hidden the radio buttons at the bottom. Only "from the component vendor's web site" is a valid selection for these prerequisites. The bootstrapper .xml file format isn't sophisticated enough to limit the selection.
Only way to get ahead if you want to provide the user with these prerequisites included with the installer is to create a normal MSI installer.
The way I've done this scenario in the past is just to use the built in "publish" features. They seem to work well in my experience.
In the Publish configuration section of your application there is a "Prerequisites" button that you can click and check off .NET Framework and SQL Express, among other things. During the ClickOnce install, it will prompt the user to pull them down from Microsoft before installing your application.

VS Creating Installer with SQL Server database in application

I am following a nice tutorial titled: Walkthrough: Adding a SQL Server Compact Database to an Application and Deploying it, from MSDN. Since this application will require SQL Server, .NET Framework and SQL Compact to be installed on the machine; I opted for the "Download prerequisites from the same location as my application" because I don't want to assume the user has internet connection.
I went and downloaded the prerequisites software and saved them under:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\Packages and placed them in the relevant folders e.g. .NETFramework under its folder etc etc (as suggested in the tutorial).
However! When I click publish now, Visual Studio 2012 Professional displays the following:
"Error 105 To enable 'Download prerequisites from the same location as my application' in the Prerequisites dialog box, you must download file 'SQL Server Compact Edition 4.0\SSCERuntime_x86-ENU.exe' for item 'SQL Server Compact 4.0 SP1' to your local machine. For more information, see http://go.microsoft.com/fwlink/?LinkId=239883. SQLCompactWalkthrough"
And I have already downloaded the prerequisite files and placed them under packages folder. What else could I possibly be missing here?
Tumelo, make sure the prerequisite files you downloaded are indeed the .exe files and not the .msi files.
You can download the .exe files here

Installer for ASP.NET project

I have an ASP.NET project in VS2012. I'd like to publish an "offline" version of this site.
I'd like the installer, to:
Enable (or install) the IIS on Windows (if necessary)
Install the MS SQLExpress (if necessary)
Install the .NET (if necessary)
Install the project's files, and start the site on localhost.
Can you help me, how to start?
MSI packages (digitally signed) are the standard way of deploying Windows applications. You can use a tool like Advanced Installer, such tools offer predefined support to install Windows Features, prerequisites (SQLExpress or .NET Framework), install IIS web apps and of course copy your files and create the corresponding folders structure.
This application has a free edition, but for what you need you have to purchase a Pro license. It also has a full 30 days trial.
(disclaimer: I work on it)
If not going with #SLaks suggestion, you have to create either a script (powershell) or a installation package to setup all the components in your solution. There a a bunch of installation packages around (Wikipedia

Categories

Resources