c# - redistribuible - Excel para acceder a error de importación
componente redistribuible del motor de base de datos de microsoft access 2016 (2)
El error suena correcto. Parece que Persons $ está en la hoja de cálculo pero has abierto una conexión a la base de datos (no puedes hacer una "inserción en seleccionar desde" porque no están en la misma base de datos o vinculados). Es probable que necesite abrir una conexión a ambos (luego consultar uno, insertar en el otro). Algo como el pseudo código siguiente funcionaría:
1.) Abra una conexión a la base de datos de acceso como lo hizo.
2.) Abra una conexión separada a la hoja de cálculo.
3.) Consultar las personas $ en la hoja de cálculo, devolver decir un DataReader (ExecuteReader).
4.) Iterar el DataReader y ejecutar una instrucción de inserción para cada fila (insertar en la base de datos de acceso). Use una declaración parametrizada para proteger contra las inyecciones de SQL / cosas que desordenarán el SQL inadvertidamente. Está hablando desde una fuente de datos y está ingresando en el otro registro por registro.
Si le preocupa que todo el lote de registros ingrese, use una transacción y repliegue si hay algún error. Eso asegurará que obtengas todo o nada.
Propósito: Importar datos de excel a la base de datos ms access (.mdb).
Referencia: https://www.mikesdotnetting.com/article/79/import-data-from-excel-to-access-with-asp-net
Tecnología: C # .net Windows Forms
Error: "El motor de la base de datos Microsoft Jet no puede encontrar la tabla de entrada o consulta ''Personas $''. Asegúrese de que exista y de que su nombre esté escrito correctamente".
Código:
private void button6_Click(object sender, EventArgs e)
{
string Access = @"c:/exportdb/DestinationDB.mdb";
string connect = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/exportdb/DestinationDB.mdb;";
using (OleDbConnection conn = new OleDbConnection(connect))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO [MS Access;Database=" + Access + "].[Persons] SELECT * FROM [Persons$]";
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
Nota : He creado una base de datos de MS Access llamada "DestinationDB.mdb" con el nombre de la tabla como "Personas" con los siguientes campos: ContactID, FirstName, SecondName, Age
A partir de entonces, he exportado el mismo para sobresalir a fin de mantener la estructura del encabezado.
Una vez exportado este Excel, agregué unos 10 registros manualmente.
Ambos archivos se encuentran en "c: //exportdb/source.xls" y "c: //exportdb/DestinationDB.mdb".
Instantánea de acceso de la Sra.
Por favor, ayúdame a resolver el error mencionado anteriormente.
¡Gracias!
Su cadena de conexión no coincide con la referencia que está siguiendo:
Su cadena de conexión:
string connect = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/exportdb/DestinationDB.mdb;";
Su cadena de conexión tiene las propiedades extendidas y especifica Excel 8.0:
string connect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Excel +";Extended Properties=Excel 8.0;";
El otro problema es que su fuente de datos es la base de datos de acceso DestinationDB.mdb, observe cómo la referencia que está siguiendo especifica Excel como la fuente de datos.