sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es el problema con AttachDbFilename?

Uso de User Instance significa que SQL Server está creando una copia especial de ese archivo de base de datos para que la use su programa. Si tiene dos programas diferentes que usan la misma cadena de conexión, obtienen dos copias completamente diferentes de la base de datos. Esto lleva a mucho de confusión, ya que las personas probarán la actualización de datos con su programa, luego se conectarán a una copia diferente de su base de datos en Management Studio y se quejarán de que su actualización no funciona. Esto los envía a través de una serie defectuosa de pasos inútiles tratando de solucionar el problema equivocado.

Este artículo profundiza en cómo usar esta función, pero preste atención a la primera nota:la User Instance la función ha quedado obsoleta . En SQL Server 2012, las alternativas preferidas son (en este orden, en mi humilde opinión):

  1. Cree o adjunte su base de datos a una instancia real de SQL Server. Su cadena de conexión solo necesitará especificar el nombre de la instancia, el nombre de la base de datos y las credenciales. No habrá confusión ya que Management Studio, Visual Studio y su(s) programa(s) se conectarán a una sola copia de la base de datos.

  2. Usa SqlLocalDb para el desarrollo local. Creo que le señalé este artículo ayer:"Introducción a SQL Server 2012 Express LocalDB".

  3. Utilice SQL Server Compact. Esta opción me gusta menos porque la funcionalidad y la sintaxis no son las mismas, por lo que no necesariamente le proporcionará toda la funcionalidad que finalmente querrá implementar. Compact Edition también está en desuso, así que eso es todo.

Por supuesto, si está utilizando una versión SqlLocalDb no es una opción, por lo que debe crear una base de datos real y usarla de manera consistente. Solo menciono la opción Compactar para completar; creo que puede ser una idea casi tan mala como usar AttachDbFileName .

EDITAR: He escrito sobre esto aquí:

  • Malos hábitos:uso de AttachDBFileName