Insertar comilla y comilla doble en un query en vb.net

Publicado en 'Programación' por Wshingo, 22 Oct 2014.





  1. Wshingo

    Wshingo Miembro frecuente

    Registro:
    9 Oct 2013
    Mensajes:
    172
    Likes:
    4




    Hola disculpen tenia un problema al tratar de ingresar comillas o comilla doble en mi query. Mi programa hace un bucle a una pagina web y va capturando los datos que encuentra, pero lo malo es que por ejm si capturo sombres de empresas y algunas tienen comilla o comilla doble tengo que ingresarlo tal como estay ahí me malogra mi query.

    Mi query esta así, | query = "insert into empresas (emp_nombre) values (" & chr(34) & empresa & chr(34) & ")"

    Poniendo el ascii de " osea chr(34) logro evitarme el problema cuando me viene doble comilla pero si después de eso me viene con comilla simple pues me bota error ya que me malogra la consulta.

    Enverdad espero me puedan ayudar porque estoy que me rompo la cabeza con esto XD. Gracias
     


  2. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    hola,
    te sugiero crearte un stored procedure para tal propósito y ya no tendrás ese tipo de problemas, además ya no estarás expuesto a un sql injection.
    Saludos
     
  3. Wshingo

    Wshingo Miembro frecuente

    Registro:
    9 Oct 2013
    Mensajes:
    172
    Likes:
    4
    Lo haria con mucho gusto peeeero no trabajo con bases en sql sino en access poreso estoy obligado a hacer eso
     
  4. AiApaec

    AiApaec Miembro frecuente

    Registro:
    1 May 2014
    Mensajes:
    58
    Likes:
    14
    La manera de escapar una coma simple (') en query en sql es hacer que se repita, es decir esto ' se convierte en esto: '', por ejemplo:
    //Esto daría error:
    string description = "this is a 'description'";//notar las comillas simples
    string myQuery = "SELECT Column FROM Table WHERE Description = '" + description + "'";
    //Solución:
    string description = "this is a 'description'";//notar las comillas simples
    //se agrega una comilla simple. ahora description contiene: this is a ''description'':
    description = description.Replace("'", "''");
    string myQuery = "SELECT Column FROM Table WHERE Description = '" + description + "'";

    PD: Aunque no es la solución más elegante. Por cierto, Sql Server 2012 Express viene con varios gigas (creo que 50), deberías pasarte para evitar todas esas limitaciones de access, la versión express sale gratis así que no hay que preocuparse de las licencias.
     
  5. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Pues en ese caso podrías recurrir al uso de Parámetros. Asumiendo que estás utilizando el proveedor OLEDB para conectarte con Access:
    Código:
    try
    {
        string nombreEmpresa = txtNombreEmpresa.Text;
    
        string sqlStm = "insert into empresas (emp_nombre) values (@emp_nombre)";
    
        using (OleDbConnection conexion = new OleDbConnection())
        {
            conexion.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\BD1.accdb;Persist Security Info=False";
    
            using (OleDbCommand comando = conexion.CreateCommand())
            {
                comando.Connection = conexion;
                comando.CommandText = sqlStm;
                comando.CommandType = CommandType.Text;
    
                comando.Parameters.AddWithValue("@emp_nombre", nombreEmpresa);
    
                conexion.Open();
    
                int rows = comando.ExecuteNonQuery();
            }
        }
    }
    catch (Exception ex)
    {
        // Capturar y actuar
    }
    
    Lo harías de manera análoga si estás conectando a través de ODBC.
    Código C# pásalo a VB.

    Saludos.
     
Etiquetas: