Pregunta

Estoy empezando con una base de datos SQL Server. Por lo que parece que debo utilizar espacio de nombres System.Data.SqlClient. Sin embargo, existe la posibilidad de que podamos cerrar nuestra base de datos de SQL Server y vaya a MySQL u Oracle. Por esta razón, estoy subiendo con un conjunto de normas sobre cómo nuestras aplicaciones .Net se comunicarán con la base de datos, a fin de hacer más fácil la migración a un sistema de base de datos diferente en el futuro si teníamos que hacerlo.

Así que aquí están las normas:

  1. Utilice un ORM si es posible (por ejemplo, NHibernate) (n LINQ, ya que sólo apoya SqlServer, pero ¿qué pasa marco de la entidad y su apoyo a Oracle y MySQL?)
  2. Si ORM es un exceso de matanza, a continuación, utilizar consultas SQL con parámetros.
  3. Use almacenado procedimientos sólo para carreras de larga o acciones complejas que necesario llevar a cabo en el base de datos.

Lo que me lleva a mi principal cuestión que nos ocupa. ¿Qué espacio de nombres debo utilizar para codificar mi DAL?

A mi me parece que la elección es entre System.Data.ODBC y System.Data.OleDB:

  • ¿Cuáles son las ventajas y desventajas?
  • Es uno preferido sobre el otro?
  • ¿Cuáles son sus pensamientos acerca de las 3 primeras normas?
¿Fue útil?

Solución

System.Data.SQLClient

Se conecta a SQL Server 2000 y versiones posteriores solamente, pero usted recibirá un rendimiento óptimo cuando se conecta a las bases de datos.

System.Data.OleDbClient

Se conecta a SQL 6.5

OLEDBClient le da capacidad de conectarse a otra base de datos como Oracle o Access. Pero para trabajar con SQL Server obtendrá un mejor rendimiento utilizando SQLClient.

Nota:. Para la conexión a Oracle, Microsoft también tiene OracleClient

System.Data.ODBCClient

Se conecta a bases de datos heredadas solo, usando controladores ODBC. (Por ejemplo MS Access 97.)

fuente original

Otros consejos

Usted desea utilizar el controlador de SQL Server. Yo entiendo lo que está tratando de hacer, pero la forma en que lograría el apoyo a múltiples bases de datos es mediante la inserción de una nueva capa de abstracción. Esto se puede hacer de muchas maneras. Pero se pone el código específico de base de datos en el borde de la jerarquía de clases. Por lo tanto, cada clase puede obtener los beneficios de la funcionalidad específica de base de datos, pero las personas que llaman de nivel superior no sabe ni le importa lo que la base de datos se utiliza debajo. En lo que a ORM, prefiero LLBLGen , pero esto es sólo mi preferencia.

Además, sólo para aclarar, LINQ no es específico de SQL Server. Es decir LINQ a SQL. LINQ es una tecnología de consulta que se puede utilizar en LINQ to SQL, LINQ a Entidades, LINQ a objetos, e incluso LLBLGen compatible con LINQ.

No importa si utiliza SQLClient u ODBC, por ahora, si utiliza procedimientos almacenados u otras funciones de base de datos específica, tendrá que volver a escribir si cambia los motores de bases de datos.

Me acabo de utilizar SqlClient y re-escritura / re-generar el DAL si ha cambiado.

A menos que usted va a poner en práctica y prueba en múltiples plataformas en este momento, no estoy seguro de que el esfuerzo adicional en este momento es una gran cosa ni menos que el esfuerzo para hacer de nuevo el DAL, y el hecho de que usted tiene consiguió un DAL en absoluto significa que tienes todo en un solo lugar para un cambio más adelante de todos modos.

Si usted tiene alguna sospecha de que se le intercambiando las bases de datos (o el apoyo a múltiples traseras) y luego un ORM es el camino a seguir. De lo contrario, usted todavía tiene que refactorizar / reescribir una gran cantidad de su DAL con el fin de apoyar el cambio. Si su aplicación es pequeña, no va a ser malo, pero nada sustancial y se le dolía.

Usted encontrará que el uso de SQL Server el SqlClient es mucho más rápido y más fácil de desarrollar con más de OleDB y ODBC - a menos que sea muy probable que tendrá que soportar múltiples plataformas se encuentra que los beneficios superan a los riesgos que se quiere que tenga que volver a escribir su DAL.

Además, el uso OleDB / ODBC es de sólo 1 manera de mantener la independencia de plataforma - puede que le resulte más eficaz disponer de múltiples implementaciones de su DAL, cada uno usando un cliente nativo para la plataforma está utilizando

.

He oído decir que a menos que sea una característica clave, usted no debe preocuparse demasiado acerca de mantener la independencia de plataforma. Dicho esto,

SQLClient le dará acceso nativo y debería ser más performante (que no tiene que hacer ningún abstracciones / traducciones).

Lo único que tiene que cambiar para conseguir OLEDB de trabajo frente a ODBC es la cadena de conexión. OLEDB tiene un poco más de inteligencia del lado del cliente por lo que ofrece un mejor rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top