Principales respuestas
Error The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine en proyecto MVC

Pregunta
-
Buenas Tardes:
Actualmente estoy desarrollando una opcion para hacer una carga masiva de un archivo excel a una BD sql server 2014 el proceso de cargar el archivo al proyecto funciona bien el problema esta cuando tengo que leer el archivo e inyectarlo a la BD para tal fin estoy usando LinqtoExcel esta es mi clase:
public class ManipuladorExcel
{
private readonly ExcelQueryFactory _excel;
public ManipuladorExcel(string nombreArchivo)
{
_excel = new ExcelQueryFactory(nombreArchivo)
{
DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Ace,
TrimSpaces = LinqToExcel.Query.TrimSpacesType.Both,
UsePersistentConnection = true,
ReadOnly = true
};
}
public IEnumerable<LCliente> ObtenerClientesDesdeArchivo()
{
try
{
var filas = from c in _excel.Worksheet<LCliente>("Clientes")
select c;
return filas.ToList();
}
catch(Exception ex)
{
string error = ex.Message;
return new List<LCliente>();
}
}
}
}y este es mi ActionResult en el controlador
public ActionResult Upload(HttpPostedFileBase file)
{
var fileName = Path.GetFileName(file.FileName);//obtenemos el nombre del archivo a cargar
file.SaveAs(Server.MapPath(@"~\Content\" + fileName));//guardamos el archivo en la ruta física que corresponde a la ruta virtual del archivo
var archivo = Server.MapPath(@"~\Content\" + fileName);
List<LCliente> clientes = new List<LCliente>();
var manipulador = new ManipuladorExcel(archivo);
clientes = manipulador.ObtenerClientesDesdeArchivo().ToList();
foreach (var cliente in clientes)
{
List<Cliente> Lcliente = new List<Cliente>();
Cliente objcli = new Cliente();
objcli.Cedula = cliente.Cedula;
objcli.Nombres = cliente.Nombres;
objcli.Direccion = cliente.Direccion;
objcli.id_Ciudad = cliente.Ciudad;
objcli.telefono1 = cliente.Tel1;
objcli.telefono2 = cliente.Tel2;
objcli.id_EstadoAct = 0;
objcli.Perfil_id = cliente.Perfil;
objcli.Estado = true;
objcli.Creado_Por = Session["Session_Usuario"].ToString();
objcli.Fecha_Creado = DateTime.Now;
objcli.Modificado_Por = Session["Session_Usuario"].ToString();
objcli.Fecha_Modificado = DateTime.Now;
Lcliente.Add(objcli);
_datos.Clientes.InsertAllOnSubmit(Lcliente);
}
try
{
_datos.SubmitChanges();
}
catch (Exception e)
{
// Si ocurre un error, lo registramos mostramos.
string errorMsg = String.Format("{0} - {1}", archivo, e);
}Pero al hacerle un paso a paso me sal esta excepcion The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine , ya instale este driver y sigue sin funcionar. Estoy trabajando sobre un equipo com Windows 10 Home y Visual Studio 2015 Community, no se si el problema se de por la version Home del SO, EL Motor de BD lo tengo instaldo en un Maquina Virtual VMWare con sistema Operativo Windows 7 ultimate.
Agradezco sus comentarios y/o alternativas para hacer esta carga masiva.
mil gracias
Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia
Respuestas
-
Buenas Noches
Les comento que finalmente solucione este inconveniente pero para tal fin instale el diver AccessDatabaseEngine y el BuildCompiler en X86, le dejo el link de descarga por si se les presenta este mismo problema
https://www.microsoft.com/es-es/download/confirmation.aspx?id=23734
Saludos
Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia
- Marcado como respuesta Carlos Alberto Hernandez R lunes, 17 de octubre de 2016 0:48
Todas las respuestas
-
hola
Esta claro que la libreria LinqtoExcel por debajo esta usando ado.net
si esto ejecuta en un entorno web y usas el IIS deberias habilitarlo a 32 bits
ademas de compilar con compatibilidad a 32 bits
sino aplicas estos cambios a 32bits el acceso mediante ado.net a excel no funciona
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Buen Dia Lenadro
Mil gracias por tu oportuna respuesta, esto ya lo habia hecho y no funciona mi pregunta es tendra que ver algo la version Home de mi Windows 10.
gracias
Saludos
Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia
-
hola
no creo que Win10 tenga que ver, sino mas bien la arquitectura de la pc, que sea de 64bit si lo afecta
ahh quizas debas ver de instalar office en la pc, eso deberia agregar los driver, al menos podrias probarlo
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Lenadro
efectivamente la arquitectura del mi laptop es de 64 bits, tambien baje el driver
Microsoft.ACE.OLEDB.12.0 de 64 y lo instale y nada, tengo instalado office 365, que otra alternativa me suguieres para hacer una carga masiva
gracias
Saludos
Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia
-
hola
office 365 no aplica porque este se accede por medio del browser, yo apunto a instalar office local en la pc ya que este agrega los driver de acceso a los documentos
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
Buenas Noches
Les comento que finalmente solucione este inconveniente pero para tal fin instale el diver AccessDatabaseEngine y el BuildCompiler en X86, le dejo el link de descarga por si se les presenta este mismo problema
https://www.microsoft.com/es-es/download/confirmation.aspx?id=23734
Saludos
Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia
- Marcado como respuesta Carlos Alberto Hernandez R lunes, 17 de octubre de 2016 0:48
-