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 originalpublic String limpiarSql(String oldSql) {
//identificar que tipo de instruccion es
string[] partes;
string[] cortar;
string nuevoSql="";
String datos = "";
if (oldSql.ToUpper().IndexOf("INSERT") != -1)
{
nuevoSql = oldSql.ToUpper().Substring(0,oldSql.IndexOf("VALUES"));
nuevoSql += "VALUES ";
datos = oldSql.ToUpper().Substring(oldSql.IndexOf("VALUES")+7);
}
if (oldSql.ToUpper().IndexOf("UPDATE")!=-1){
nuevoSql = oldSql.ToUpper().Substring(0, oldSql.IndexOf("SET"));
nuevoSql += "SET ";
datos = oldSql.ToUpper().Substring(oldSql.IndexOf("SET")+4);
string[] words = datos.Split(',');
for (int i = 0; i<words.Length;i++)
{
nuevoSql += limpiarUpdate(words[i]);
}
}
if (oldSql.ToUpper().IndexOf("SELECT") != -1)
{
if (oldSql.ToUpper().IndexOf("WHERE") != -1) {
nuevoSql = oldSql.Substring(0, oldSql.ToUpper().IndexOf("WHERE"));
nuevoSql += "WHERE ";
datos = oldSql.ToUpper().Substring(oldSql.ToUpper().IndexOf("WHERE") + 6);
string[] words = crearArray(datos,"SELECT");
for (int i = 0; i < words.Length; i++)
{
nuevoSql += limpiarUpdate(words[i]);
}
}
}
//INSERT
//UPDATE
return oldSql;
}
private String[] crearArray(string texto, String tipo) {
string nTexto = texto.ToUpper();
string[] nArray = null;
string[] nuevoArray = null;
if (tipo == "SELECT")
{
//agrego espacios
nArray = texto.Split('=');
string cadena = "";
for (int i = 0; i < nArray.Length; i++)
{
cadena = nArray[i] + " = " + nArray[i+1];
i++;
}
nArray = cadena.Split(' ');
for (int i = 0; i < nArray.Length; i++)
{
nuevoArray.SetValue(nArray[i],nuevoArray.Length);
}
}
return nArray;
}
private string limpiarUpdate(string texto) {
string nuevo = "";
String[] campo = texto.Split('=');
nuevo += campo[0] + "=" + limpiarCadena(campo[1]);
return nuevo;
}
private string limpiarCadena(String texto) {
string nTexto = "";
if (texto.Trim().EndsWith("'") & texto.Trim().StartsWith("'"))
{
nTexto = texto.Trim().Substring(1, texto.Trim().Length - 2);
nTexto = "'" + nTexto.Replace("'", "'")+ "'";
}
else {
nTexto = texto;
}
return nTexto;
}
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