none
Problemas y Ayuda con Substring

    Question

  • Buenas tardes, el problema mio es el siguiente, me dijeron que usara los substring para cambiar informacion dentro de una secuencia sql les muestro:

    namespace Ejecutar_Archivo
    {
        class Program
        {
            static void Main(string[] args)
            {
                /* Conexión base de datos */
                OdbcConnection conn = new OdbcConnection("Driver={Microsoft ODBC for Oracle};Server=INFOREG;Uid=SUI;Pwd=Sui_2010.;");
                conn.Open();
                index();
                //Leer Archivo sql
                string queryString = System.IO.File.ReadAllText(@"C:\AutoGI\Quertys\querty 1.sql");
                Console.WriteLine(queryString);
    Console.ReadLine();
                conn.Close();
            }
            public static void index()
            {
                
                
                String ante = XMLParameterUtil.getParameter("anterior");
                String cierre = XMLParameterUtil.getParameter("cierre");
                // Este sera el cambio del archivo de XML
                String mesAnterior = cierre;
                String sql = System.IO.File.ReadAllText(@"C:\AutoGI\Quertys\querty 1.sql");
                String part1 = sql.Substring(0, sql.IndexOf("A.PERIODO"));
                String temp = sql.Substring(sql.IndexOf("A.PERIODO"), sql.Length - sql.IndexOf("A.PERIODO"));
                String part2 = temp.Substring(0, temp.IndexOf("'"));
                temp = temp.Substring(temp.IndexOf("'"), temp.Length - temp.IndexOf("'"));
                temp = temp.Substring(1, temp.Length - 1);
                String part3 = temp.Substring(temp.IndexOf("'"), temp.Length - temp.IndexOf("'"));
                String newSQL = part1 + part2 + "'" + cierre + part3;
            }

    Este es el programa que se desarrollo para ver si el cambio estaba realizado, este archivo depende de un archivo XML con estos datos:

     <?xml version="1.0" encoding="utf-8" ?>
    - <parametros>
      <facturacion>2012206</facturacion>
      <cierre>2012204</cierre>
      <anterior>0000000</anterior>
      <siguiente>0000000</siguiente>
      <fechas>01/JUN/2012</fechas>
      <ciclos>01</ciclos>
      </parametros>

    para que el programa lea estos datos tengo este codigo:

      public static String getCierre()
            {
                FileStream fs = new FileStream(@"C:\AutoGI\parametros.xml", FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read);
                String cierre = "0000000";
                try
                {
                    XmlReader reader = XmlReader.Create(fs);
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Element && reader.Name == "cierre")
                        {
                            reader.Read();
                            cierre = reader.Value;
                        }
                    }
                    reader.Close();
                    if (cierre == null || cierre.Trim() == "")
                    {
                        cierre = "0000000";
                    }
                }
                catch (FileNotFoundException)
                {
                    cierre = "0000000";
                }
                return cierre;
            }

    Finalmente este es el sql que quiero aplicarle el cambio:

    SELECT A.CICLO, A.FECHA_INI FECHA_LECTURA_ANTERIOR, B.FECHA_INI FECHA_LECTURA_ACTUAL, A.DIAS, 
    SUM(E.DEMANDA_REGULADA), (SUM(E.DEMANDA_REGULADA)/A.DIAS) PROMEDIO_DIARIO
    FROM VAL_FECHAS A, VAL_FECHAS B, CIERRE.SERIE_DEMANDA_REGULADA E
    WHERE A.PERIODO = '0000000'  ---- MES ACTUAL CON EL FORMATO YYYYTMM 
    AND B.PERIODO = '0000000'  ---- MES SIGUIENTE CON EL FORMATO YYYYTMM 
    AND A.CICLO = B.CICLO
    AND E.FECHA > A.FECHA_INI
    AND E.FECHA <= B.FECHA_INI 
    GROUP BY A.CICLO, A.FECHA_INI, B.FECHA_INI, A.DIAS

    Ahora viene la peticion mia, cuando ejecuto el programa (que no se si los datos estan bien), no hace el cambio interno en A.PERIODO = '0000000' deberia colocar e del cierre el cual es 2012204, que puedo hacer?

    Gracias por la atencion prestada.

    Tuesday, July 24, 2012 5:08 PM

All replies

  • porque usas odbc para conectar con Oracle, eso esta muy mal

    deberias usar el proveedor de ado.net que esta db provee

    Build a .NET Application on the Oracle Database with Visual Studio 2005 or 2008

    http://social.msdn.microsoft.com/Forums/es/vcses/thread/45e1a415-cbb3-4d96-af7e-ae37e87038a1

    como veras deebs poner el odac y usar los componentes ado.net de oracle, y nunca odbc

    Ahora viene la peticion mia, cuando ejecuto el programa (que no se si los datos estan bien), no hace el cambio interno en A.PERIODO = '0000000' deberia colocar e del cierre el cual es 2012204, que puedo hacer?

    es oracle no creo que existe el substring, debes aprender PL-SQL

    Oracle/PLSQL: To_Date Function

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Tuesday, July 24, 2012 5:14 PM
  • Pero independientemente, no tanto por apicar a oracle, anteriormente con un codigo que un profesor habia desarrollado en el de el si cambiaba por que que se adaptara, a diferencia de mi que no cambia el codigo no toma el valor
    Tuesday, July 24, 2012 7:38 PM
  • no entendi el planteo

    el codigo sino entendi mal lo quieres hacer en la query, si es asi deebs ver el tema por el lado de PL-SQL

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Tuesday, July 24, 2012 7:44 PM
  • mm quizas si como tu dices no fui muy claro, te lo explico asi, hay un programa que egenera un XML dentro de este estan los datos que estan mas arriba cierre, facturacion, etc, aparte de ese programa que genera esos parametros, esta este, este se encarga de mirar el XML y de buscar y remplazar los valores que tenga, con  lo que se quiera remplazar, ejemplo la linea de index lo que se supone que debe hacer es que lee hasta la palabra "A.Periodo" y de hay va y remplaza lo que esta dentro de las comillas simples '0000000' por el XML (e dato que se requiere) en este caso lo deberia cambiar por cierre.

    Cabe aclarar, los cierres son cambiantes mensualmente.
    • Edited by Hurt24 Tuesday, July 24, 2012 8:39 PM
    Tuesday, July 24, 2012 8:19 PM