Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/06/2012, 15:23
franciscomusico
 
Fecha de Ingreso: enero-2009
Mensajes: 201
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: revisar si el sql tiene caracteres raros

gracias por responder


lo puse en este foro por lo siguiente:

la clase que estoy usando está en .net (c++ para ser exacto)
y es una funcion que recibe la sentencia y la debe trabajar.

les pongo parte del codigo que tengo


Código C++:
Ver original
  1. public String limpiarSql(String oldSql) {
  2.             //identificar que tipo de instruccion es
  3.             string[] partes;
  4.             string[] cortar;
  5.             string nuevoSql="";
  6.             String datos = "";
  7.             if (oldSql.ToUpper().IndexOf("INSERT") != -1)
  8.             {
  9.                 nuevoSql = oldSql.ToUpper().Substring(0,oldSql.IndexOf("VALUES"));
  10.                 nuevoSql += "VALUES ";
  11.                 datos = oldSql.ToUpper().Substring(oldSql.IndexOf("VALUES")+7);
  12.  
  13.             }
  14.  
  15.             if (oldSql.ToUpper().IndexOf("UPDATE")!=-1){
  16.                 nuevoSql = oldSql.ToUpper().Substring(0, oldSql.IndexOf("SET"));
  17.                 nuevoSql += "SET ";
  18.                 datos = oldSql.ToUpper().Substring(oldSql.IndexOf("SET")+4);
  19.                 string[] words = datos.Split(',');
  20.                 for (int i = 0; i<words.Length;i++)
  21.                 {
  22.                     nuevoSql += limpiarUpdate(words[i]);
  23.                 }
  24.  
  25.             }
  26.             if (oldSql.ToUpper().IndexOf("SELECT") != -1)
  27.             {
  28.                 if (oldSql.ToUpper().IndexOf("WHERE") != -1) {
  29.                     nuevoSql = oldSql.Substring(0, oldSql.ToUpper().IndexOf("WHERE"));
  30.                     nuevoSql += "WHERE ";
  31.                     datos = oldSql.ToUpper().Substring(oldSql.ToUpper().IndexOf("WHERE") + 6);
  32.                     string[] words = crearArray(datos,"SELECT");
  33.                     for (int i = 0; i < words.Length; i++)
  34.                     {
  35.                         nuevoSql += limpiarUpdate(words[i]);
  36.                     }
  37.                 }
  38.  
  39.             }
  40.            
  41.            
  42.             //INSERT
  43.  
  44.             //UPDATE
  45.             return oldSql;
  46.         }
  47.  
  48.         private String[] crearArray(string texto, String tipo) {
  49.             string nTexto  = texto.ToUpper();
  50.             string[] nArray = null;
  51.             string[] nuevoArray = null;
  52.             if (tipo == "SELECT")
  53.             {
  54.                 //agrego espacios
  55.                 nArray = texto.Split('=');
  56.                 string cadena = "";
  57.                 for (int i = 0; i < nArray.Length; i++)
  58.                 {
  59.                     cadena = nArray[i] + " = " + nArray[i+1];
  60.                     i++;
  61.                 }
  62.                 nArray = cadena.Split(' ');
  63.                 for (int i = 0; i < nArray.Length; i++)
  64.                 {
  65.                     nuevoArray.SetValue(nArray[i],nuevoArray.Length);
  66.                 }
  67.             }
  68.             return nArray;
  69.         }
  70.  
  71.         private string limpiarUpdate(string texto) {
  72.             string nuevo = "";
  73.             String[] campo = texto.Split('=');
  74.             nuevo += campo[0] + "=" + limpiarCadena(campo[1]);
  75.             return nuevo;
  76.         }
  77.  
  78.         private string limpiarCadena(String texto) {
  79.             string nTexto = "";
  80.             if (texto.Trim().EndsWith("'") & texto.Trim().StartsWith("'"))
  81.             {
  82.                 nTexto = texto.Trim().Substring(1, texto.Trim().Length - 2);
  83.                 nTexto = "'" + nTexto.Replace("'", "'")+ "'";
  84.             }
  85.             else {
  86.                 nTexto = texto;
  87.             }
  88.             return nTexto;
  89.         }

Primero, distingo que tipo de sentencia es (update, select, insert) y de acuerdo a eso busco palabras claves para poder cortar parte de la sentencia (VALUES, WHERE, SET, segun sea el caso)

y despues tengo las complicaciones ya que quiero revisar las diferentes cadenas de un update, por ejemplo, entonces a base de un cadena.split(",") busco los diferentes campos....

el problema que tengo es que pasa cuando, en un update, por ejemplo, tengo una cadena de resultados y dentro de un string viene una coma, entonces el metodo que propuse para limpiar los caracteres raros no me funciona, y ahi comienza mi problema, requiero ayuda, espero que puedan entender la problemática,

gracias

El problema lo tengo que
__________________
Francisco Birrer
Arquitecto de Software e-process
http://www.universite.cl