2009-03-25 18 views
6

Hace un tiempo, pregunté a question sobre qué DB local era adecuado para mi situación. Necesitaba acceder al DB desde el código .NET y VB6. La abrumadora respuesta fue SQLite. Sin embargo, decidí pasar SQLite, porque el único proveedor OLE DB que cobra regalías por cada copia desplegada de mi software. También requiere un procedimiento de activación para ejecutarse en cada PC.Pros y contras del motor de base de datos Access. La vida después de SQLite

Después de evaluar otras opciones (edición SQL Server Compact - proveedor OLE DB apenas funcional, Firebird - no quiero tener que pagar por otro controlador, etc ...), he llegado a la conclusión de que el único viable la opción es usar archivos .MDB creados por Microsoft Access (o el motor Jet).

No lo he usado desde finales de los 90, así que tengo las siguientes preguntas para aquellos que tienen experiencia con él.

  1. Han resuelto el problema donde la base de datos se corrompe de vez en cuando.
  2. El acceso al MDB desde C# se realiza a través del proveedor ADO.NET OLEDB o existe una solución nativa (parece que no puedo encontrarlo).
  3. ¿Existe una alternativa viable al realmente desagradable editor de SQL en Access?

Gracias.

+0

he tenido una serie de aplicaciones de acceso pequeña en uso por un número de clientes por un buen número de años y solo puede recordar dos casos de corrupción hasta el momento, uno muy leve, uno menos, ambos recuperables. Se trata de configurarlo correctamente: http://allenbrowne.com/ser-25.html – Fionnuala

Respuesta

7

En lugar de "volver" a Access, me gustaría seguir con SQLite y utilizar el proveedor System.Data.SQLite para SQLite acceso a datos dentro del código .NET.

Luego crearía una clase .NET de interoperabilidad COM para ser usada por VB6 que envuelve cualquier funcionalidad requerida de acceso a datos SQLite. Finalmente, solo haga referencia y úselo como un objeto COM estándar de sus proyectos VB6.

Mi conocimiento de Access es probablemente un poco anticuado y sesgado por las malas experiencias, pero dentro de lo razonable probaría la mayoría de las otras opciones antes de recurrir a la ruta de acceso.

+1

.net interoperacion es una buena idea. No pensé en eso. Gracias. – AngryHacker

+0

Sin problemas. Tiene un golpe de rendimiento adicional con un contenedor COM en cada llamada a método. Pero si diseña los métodos para que pueda llamarlos solo una o dos veces, en lugar de, por ejemplo, cada iteración en un ciclo, el rendimiento puede ser bastante bueno. – Ash

5

¿Ha considerado SQL Server 2008 Express Edition (como opuesto a SQL Server CE)?

1) Personalmente, encontré que la mayoría de las veces que las bases de datos de acceso se corrompían se debían a un código que no se limpiaba después de sí mismo, o que había una tarjeta de red defectuosa.

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
          @"Data Source = C:\data\northwind.mdb; " + 
          @"User Id = guest; Password = abc123” 


using (OleDbConnection oleDbConnection = New OleDbConnection()) 
{ 
    oleDbConnection.ConnectionString = connectionString; 

    oleDbConnection.Open(); 

    ... 
} 

3) de SQL Server 2008 Express Edition

+0

advertencia: Microsoft presenta una base de datos móvil nueva y diferente cada tres o cuatro años. – dkretz

+0

¿Está diciendo que puede editar SQL for Access con SQL Server 2008 Express Edition? – AngryHacker

1

También puede probar SQL Anywhere que se ejecuta en varios sistemas operativos y tiene una huella pequeña. Funciona para mí :)

2

Dado que el formato MDB es más o menos obsoleto, su conocimiento de finales de los 90 está bastante actualizado. See this MSDN page

+0

Uh, la sección de ese artículo sobre tecnologías obsoletas trata sobre MDAC no tanto sobre el uso de Jet a través de otras interfaces. El artículo también es incorrecto sobre DAO, que tiene una actualización reciente en A2007. –

+0

Es por eso que dije "más o menos", MS parece haber llegado un poco. Pero claramente no es la plataforma de DB donde están sucediendo las cosas. –

+0

Una postura pragmática IMO es que Jet y el formato .mdb están en desuso y que ACE y el formato .accdb tienen un futuro en Access solamente. Se ha eliminado más del motor (por ejemplo, seguridad de nivel de usuario, replicación) que el que se ha introducido (tipos de varios valores, ¿alguien?), Pero ese es el precio del progreso :) – onedaywhen

4

La corrupción de MDB se debe en gran parte a fallas que ocurren en máquinas cliente, servidores de archivos y redes mientras la base de datos está abierta. Si coloca el MDB en un archivo compartido, esto siempre es un riesgo, si en un disco duro local y utilizado por un usuario, los problemas son mucho más raros.

No esperaba que SQLite fuera diferente, y en el peor de los casos.

Ejecutando JetComp periódicamente.exe (una descarga de Microsoft) solucionará muchos problemas y tablas de índices compactos, etc. Las copias de seguridad son importantes sin importar lo que uses.

No necesita MS Access para usar Jet MDBs. Existen algunas herramientas de terceros para diseñar el esquema de la base de datos y realizar consultas interactivas, tanto de línea de comando como de GUI.

+0

Gracias por su punto. Yo iba a decir lo mismo. Todos los archivos de la base de datos enfrentan riesgos de corrupción. Todos los archivos de la base de datos necesitan una opción de copia de seguridad y recuperación efectiva. Los archivos de acceso no son diferentes. En este sentido, es un inconveniente el acceso ... no puede hacer copias de seguridad en vivo. Pero se puede hacer que funcione en muchas situaciones. –

1

AngryHacker preguntó:

Q1. Han resuelto el problema donde la base de datos se corrompería de vez en cuando.

Er, ¿qué?

Nunca hubo ningún problema de corrupción en aplicaciones correctamente diseñadas correctamente implementadas en entornos adecuadamente mantenidos. No he visto un MDB dañado en 3 o 4 años, y tengo muchos de mis aplicaciones en uso de producción de tiempo completo por muchos clientes en muchos tipos diferentes de entornos operativos.

Creo que la mayoría de las personas que sufren corrupción son aquellas que intentan compartir un archivo MDB entre muchos usuarios (ya sean divididos o no). Ya que no estás contemplando el uso de Access, eso no es realmente un problema.

Q2. ¿El acceso al MDB desde C# se realiza a través del proveedor ADO.NET OLEDB o existe una solución nativa (parece que no puedo encontrarlo).

La solución nativa sería DAO, pero eso es COM, por lo que es posible que no desee usar eso. Desde C#, diría que OLEDB es tu mejor opción, pero esa no es mi área de especialización, así que tómalo con un grano de sal. Creo que Michael Kaplan informó que el proveedor Jet ADO/OLEDB era seguro para subprocesos, mientras que DAO no lo era. Sin embargo, esto no significa que haya recomendado ADO/OLEDB sobre DAO, pero sus comentarios también vinieron en un contexto de acceso, y no en C#.

Q3. ¿Hay alguna alternativa viable al realmente desagradable editor de SQL en Access?

¿Por qué usarías eso cuando no estés usando Access? Puede usar cualquier editor SQL que desee siempre y cuando pruebe que el SQL que escribe es compatible con el dialecto SQL de Jet.

Yo, por ejemplo, no veo cuál es el problema con el editor de SQL de Access (que no sea la incapacidad de establecer el tamaño de fuente), pero luego, escribo una gran cantidad de mi SQL utilizando el QBE y no lo hago incluso mirar la vista SQL.

+0

"¿Por qué estarías usando eso cuando no estás usando Access?" Er, ¿qué? Para poder evaluar al SQL Editor en Access como malo, entonces seguramente deben estar usando Access? – onedaywhen

+0

No creo que Access tenga un editor SQL como tal; más bien, tiene un generador de consultas GUI que tiene una vista SQL. Eche un vistazo a un formateador SQL en línea (http://www.dpriver.com/pp/sqlformat.htm) y al grado en que se puede personalizar. El acceso no tiene características comparables :( – onedaywhen

+0

Nunca me he perdido esas características, yo mismo. –

1

Para responder a su pregunta sobre el editor de SQL realmente asqueroso en Access, estoy completamente de acuerdo. La fuente apesta, MSAccess siempre reformatea gravemente la consulta, a veces agrega metacaracteres que rompen mi SQL y, por último, pero lo que es peor, ¡si no puede analizar el SQL, no le permitirá tener acceso a él!

Mi solución es utilizar código externo. Utilizo DAO para instanciar MSAccess y luego puedo editar directamente las consultas utilizando la colección QueryDefs. Te permite hacer la mayoría de las cosas: crear, renombrar, editar, etc. Sin embargo, hay un par de cosas que no puedes hacer de esta manera: por ejemplo, no tienes acceso a los metadatos de la consulta (descripción, oculto, etc.).

código externo también es grande porque usted puede construir un conjunto de casos de prueba, especificando los valores de retorno esperados, etc.

Cuestiones relacionadas