visual objects net microsoft libreria library data activex adodb

activex - objects - ADODBCNo se debe cargar el tipo ''ADODB.FieldsToInternalFieldsMarshaler'' desde el ensamblaje



libreria adodb connection (5)

Vea lo que encontré en esta pregunta aquí. Me referí al tuyo, pero aún no pude hacer funcionar el ADODB.

Pequeño para agregar:

SolutionExplorer -> Ver todos los archivos. Para ADODB: - Incrustar ... = Falso; - Copia Local = Verdadero.

Estoy tratando de leer un objeto ADOBD.Recordset como este (mi primera vez, así que perdone mi "noobness": D):

Presentation.Category categorySvc = new Presentation.Category(); ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128); foreach (var category in categories.Fields) // here is where I get the exception { // ... }

La llamada a ListAll funciona bien: obtengo el conjunto de registros con algunos datos que confirmo haciendo un QuickWatch en el objeto. Pero cuando el código llega a las categorías, los campos obtengo la siguiente excepción:

No se pudo cargar el tipo ''ADODB.FieldsToInternalFieldsMarshaler'' del ensamblaje ''TestCOMCalls, Versión = 1.0.0.0, Culture = neutral, PublicKeyToken = null''.

Busqué en Google este error (o simplemente por ''ADODB.FieldsToInternalFieldsMarshaler'' y no pude encontrar nada que me ayudara con el problema).

Me pregunto, ¿me falta una referencia? Además de las referencias normales, he añadido éste a mi proyecto:

Biblioteca ADODB Microsoft ActiveX Data Objects 2.5 C: / WINDOWS / assembly / GAC / ADODB / 7.0.3300.0__b03f5f7f11d50a3a / ADODB.dll

Como dije, nunca he hecho esto antes, pero al buscar un poco en Google pude ver a algunas personas haciendo esto (para cada uno en el objeto. Campos) y parece funcionar para ellos.

Cualquier ayuda o dirección es muy apreciada :)

¡Gracias!


Consiguió el mismo problema en VS 2013, y la solución para eso es que vaya a Referencias y seleccione ADODB, en las propiedades verá Incrustar tipos de Interof = Verdadero y luego cambiarlo a falso.


Está bien, me di cuenta de cómo hacer esto:

Presentation.Category categorySvc = new Presentation.Category(); ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128); categories.MoveFirst(); while(!categories.EOF) { var fields = ((dynamic)categories).Fields; for (int i = 0; i < fields.Count; i++) { var field = fields[i]; var name = field.Name; var value = field.Value; // ... } categories.MoveNext(); }


Está en las referencias individuales, no en las propiedades del proyecto. En la ventana del explorador de soluciones, abra "Referencias" (debajo del proyecto) y haga clic en la referencia en cuestión. La ventana de propiedades tendrá una opción para Incrustar tipos de interoperabilidad (para cada referencia).

En Visual Basic 2010:

Para desactivar los tipos de interoperabilidad incrustados:

Menú de proyecto> Mostrar todos los archivos, Explorador de soluciones:> Referencias:> ADODB> Incrustar tipos de Interof = Falso. Microsoft.Office.Interop.Access> Incrustar tipos de Interof = Falso

Ahora podrá publicar y también aparecerá ADODB en: Menú Proyecto> Propiedades del proyecto ... Publicar ficha> Archivos de aplicación


Resuelto

Explorador de soluciones -> Mostrar todos los archivos (elemento del menú) -> Referencias -> Adodb -> (propiedades) -> Incrustar tipos de interoperabilidad -> Falso.