none
Como ejecutar un archivo *.sql [MYSQL] para hacer consultas

    Question

  • Bueno, lo que yo quiero hacer es ejecutar un archivo tipo backup de MySQL, son archivos con extension .sql y que este se ejecute, en el interior el archivo crea cada tabla y luego inserta valores como si fuesen querys

    Una solucion seria que cargue a mano cada query en el codigo y vaya ejecutando, pero lo que quiero saber es como se hace para que se ejecute directamente el archivo y haga cada instruccion

    Gracias
    Monday, March 16, 2009 10:21 PM

All replies

  • Cual es el separador de MySql, lo que sería el símil de GO, de SQL Server?

    En este artículo: Ejecutar bacheros SQL desde .NET, se puede descargar la página RunSQL.aspx, que ejecuta un bachero (archivo *.sql) desde .NET, lo hace con un While, iterando en todas las diviciones de GO. Por eso te preguntaba cual es el separador, de mySQl para que hagas lo mismo.

    Pego el código de la página RunSQL.aspx (para SQL Server), para que te de una idea:

    <%  
        // Sample code for executing a T-SQL file using an ASP.NET page  
        // Copyright (C) Microsoft Corporation, 2007.  All rights reserved.  
          
        // Written as a sample with use in conjuction with the SQL Server Database Publishing Wizard  
        // For more information visit http://www.codeplex.com/sqlhost/  
          
        // **************************************************************************  
        // Note: Please ensure that you delete this page once your database has been published to the remote server  
        // **************************************************************************  
            
         %> 
     
    <%@ Page Language="C#" AutoEventWireup="true"  %> 
    <%@ Import Namespace="System.Data" %> 
    <%@ Import Namespace="System.Data.SqlClient" %> 
    <%@ Import Namespace="System.IO" %> 
    <%@ Import Namespace="System.Net" %> 
     
     
    <%  
        // **************************************************************************  
        // Update these variables here  
        // **************************************************************************  
          
        // Url of the T-SQL file you want to run  
        string fileUrl = @"http://<<YourDomainName>>/<<YourFileName>>.sql";      
          
        // Connection string to the server you want to execute against  
        string connectionString = @"<<Your Connection String>>";  
          
        // Timeout of batches (in seconds)  
        int timeout = 600;  
     
     
     %> 
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
     
    <html xmlns="http://www.w3.org/1999/xhtml" > 
    <head runat="server">  
        <title>Executing T-SQL</title> 
    </head> 
    <body> 
        <form id="form1" runat="server">  
        <div> 
          
        </div> 
        </form> 
        <%  
            SqlConnection conn = null;                     
            try  
            {  
                this.Response.Write(String.Format("Opening url {0}<BR>", fileUrl));  
                  
                // read file  
                WebRequest request = WebRequest.Create(fileUrl);  
                using (StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream()))  
                {  
                    this.Response.Write("Connecting to SQL Server database...<BR>");  
                      
                    // Create new connection to database  
                    conn = new SqlConnection(connectionString);                 
                      
                    conn.Open();  
     
                    while (!sr.EndOfStream)  
                    {  
                        StringBuilder sb = new StringBuilder();  
                        SqlCommand cmd = conn.CreateCommand();  
                          
                        while (!sr.EndOfStream)  
                        {  
                            string s = sr.ReadLine();  
                            if (s != null && s.ToUpper().Trim().Equals("GO"))  
                            {  
                                break;  
                            }  
                              
                            sb.AppendLine(s);  
                        }  
     
                        // Execute T-SQL against the target database  
                        cmd.CommandText = sb.ToString();  
                        cmd.CommandTimeout = timeout;  
     
                        cmd.ExecuteNonQuery();  
                    }  
     
                }  
                this.Response.Write("T-SQL file executed successfully");  
            }  
            catch (Exception ex)  
            {  
                this.Response.Write(String.Format("An error occured: {0}", ex.ToString()));  
            }  
            finally  
            {  
                // Close out the connection  
                //  
                if (conn != null)  
                {  
                    try  
                    {  
                        conn.Close();  
                        conn.Dispose();  
                    }  
                    catch (Exception e)  
                    {  
                        this.Response.Write(String.Format(@"Could not close the connection.  Error was {0}", e.ToString()));  
                    }  
                }  
            }                         
                      
              
             %> 
    </body> 
    </html> 
     


    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    Tuesday, March 17, 2009 2:38 AM
  • No entiendo muy bien, haber, eso va ejecutando sectores del transact entre cada GO, es asi o no?

    Si fuera asi, puedo agregar un comentario en mi sql, entonces que entre cada query tenga ese comentario, de esa forma se ejecutaria no?

    Gracias
    Friday, March 20, 2009 1:07 AM
  •  Así es, haz tus pruebas primero localmente y luego lo llevas al servidor.

    Si te fue útil el mensaje, márcalo como respuesta.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    Friday, March 20, 2009 2:51 AM