¿Cómo puedo usar C # para aplicar un parche a una base de datos?

Tengo un archivo por lotes que contiene comandos para restaurar una base de datos usando parches de una carpeta. Quiero crear una aplicación GUI que pueda ejecutar comandos SQL pero en lugar de aplicar todos los parches en la carpeta.

Actualmente tengo el siguiente sqlcmd en el archivo por lotes:

sqlcmd -E -S(local) -i "c:\temp\MergedPatchFiles.sql"

Los parches en la carpeta están numerados: necesito una forma de encontrar el número de parche actual de la base de datos y el número de parches en la carpeta y usar un para cada bucle para aplicar solo los parches que se requieren.

¿Cómo puedo ejecutar un comando SQL 'aplicar parche' usando C # en una base de datos específica?

preguntado el 08 de noviembre de 11 a las 17:11

4 Respuestas

Cargue el archivo sql en una cadena y use el método SqlCommand.ExecuteNonQuery http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

respondido 08 nov., 11:21

Puedes hacerlo de varias formas:

  • Utilizan Process.Start ejecutar sqlcmd directamente (o incluso el archivo por lotes directamente ...)
  • Cargue el SQL y ejecútelo usando ADO.NET

respondido 08 nov., 11:21

Es posible que tenga problemas si su archivo tiene declaraciones GO, por lo que puede usar Este enfoque:

string scriptDirectory = "c:\\temp\\sqltest\\";
string sqlConnectionString = "Integrated Security=SSPI;" + 
            "Persist Security Info=True;Initial Catalog=Northwind;Data Source=(local)";
DirectoryInfo di = new DirectoryInfo(scriptDirectory);
FileInfo[] rgFiles = di.GetFiles("*.sql");
foreach (FileInfo fi in rgFiles)
{
    FileInfo fileInfo = new FileInfo(fi.FullName);
    string script = fileInfo.OpenText().ReadToEnd();
    SqlConnection connection = new SqlConnection(sqlConnectionString);
    Server server = new Server(new ServerConnection(connection));
    server.ConnectionContext.ExecuteNonQuery(script);
}

respondido 08 nov., 11:21

Necesito una forma de encontrar el número de parche actual de la base de datos ...

Para empezar, ¿cómo está almacenando en la base de datos en qué base de datos de revisión se encuentra actualmente? Me he encontrado con 3 esquemas diferentes para realizar un seguimiento de las revisiones:

  1. una tabla de auditoría DDL,
  2. una tabla con 1 fila que tiene un número de versión,
  3. "nada" - donde tiene que adivinar en base a qué columnas, tablas, vistas y procesos almacenados qué revisión de la base de datos es esta.

La tabla de auditoría puede ser tan simple como una columna para el número de parche, una columna para cuándo se completó o más complicada como este ejemplo.

La tabla de versiones es a veces lo máximo que puedo hacer en las empresas para las que trabajo. Como mínimo, solo necesita 2 o 3 columnas y 1 fila. La estructura de esa tabla nunca debe cambiar para que la versión 51 de la aplicación pueda abrir una base de datos creada por la versión 2.

La mayoría de las empresas para las que he trabajado no tienen un esquema para rastrear en qué versión se encuentra la base de datos que no sea el trabajo de detective al descubrir que table_Q se agregó en la versión 17, pero view_P se agregó en la versión 19 y se eliminó en la versión 21, por lo que esta base de datos es probablemente la versión 19 o 20.

Uno de mis amigos me estaba hablando de DotNetNuke la semana pasada, y afirmó que había algún esquema de parcheo que puede detectar parches caídos en un directorio, determinar si ya se han aplicado y procesar los que no se han aplicado. Veré si puedo obtener mejores detalles de él.

Respondido 13 Abr '17, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.