Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.27 KB | None | 0 0
  1. String connection_string = ConsoleApplication1.Properties.Settings.Default.pruebaConnectionString;
  2.  
  3. /*
  4. En los arreglos para acceder a una casilla, se hace por su índice ( variable_arreglo[índice]. Ej: notas[2] para acceder a la TERCERA casilla del arreglo notas). Es decir, cada casilla tiene un índice y un valor.
  5. En los hashtables también hay casillas, pero en vez de acceder a su valor usando su índice (como es el caso de los arreglos), acá se accede usando un nombre específico que uno define. Si el arreglo tiene un índice y un valor por cada casilla, el hashtable tiene un key y un valor por cada casilla. Por ejemplo, podríamos tener guarda la edad de 3 personas en un hashtable así: personas = {"Pepe": 25, "Juan": 23, "Diego": 20}. Si queremos la edad de Juan: personas["Juan"] devuelve 23, si queremos la de Diego: personas["Diego"] devuelve 20. Si queremos agregar una persona más ponemos personas.Add("Felipe", 27);. Así si ahora usamos personas["Felipe"], nos va a devolver 27. Después de ese .Add de Felipe, ahora el hashtable se ve así: personas = {"Pepe": 25, "Juan": 23, "Diego": 20, "Felipe": 27}.
  6.  
  7. Hashtable largo = new Hashtable(); // esto termina como {"S01": 14000, "S02": 4700, ...} al final del código
  8. Hashtable largo_acum = new Hashtable(); // esto termina como {"S01": 1000, "S02": 400, ...}
  9. */
  10.  
  11. using (SqlConnection con = new SqlConnection(connection_string))
  12. {
  13.     con.Open();
  14.     try
  15.     {
  16.         String query = "SELECT sondajes.nombre as s_nombre, sondajes.largo as s_largo, avances.sondaje_id as a_s_id," +
  17.                        " (avances.profundidad_f - avances.profundidad_i) as a_largo from prueba.dbo.sondajes, prueba.dbo.avances" +
  18.                        " WHERE sondajes.id = avances.sondaje_id" +
  19.                        " ORDER BY sondajes.nombre;";
  20.  
  21.         /*
  22.         La query devuelve esta estructura: <1><2><3><4>
  23.         <1>: nombre del sondaje
  24.         <2>: largo del sondaje
  25.         <3>: sondaje_id del avance
  26.         <4>: largo del avance (la resta entre profundidad_f y profundidad_i)
  27.         */
  28.  
  29.         using (SqlCommand command = new SqlCommand(query, con))
  30.         {
  31.             SqlDataReader reader = command.ExecuteReader();
  32.  
  33.             while (reader.Read())
  34.             {
  35.                 /*
  36.                 Cada vuelta del while, el reader recorre un avance en particular de la BD. En cada vuelta, podemos acceder a estos datos del avance que estamos analizando de esta forma:
  37.  
  38.                 - reader["s_nombre"]: el nombre de su sondaje padre
  39.                 - reader["s_largo"] : el largo del sondaje padre
  40.                 - reader["a_s_id"]  : el id del sondaje padre
  41.                 - reader["a_largo"] : el largo del avance (que se calcula como la diferencia entre sus columnas profundidad_f y profundidad_i)
  42.  
  43.                 La idea es que cuando el while termine, las dos hashtables tengan en sus keys todos los sondajes.                
  44.  
  45.                 Si en el hashtable largo ya agregamos la key del sondaje al que pertenece el avance, entonces tenemos que sumarle el largo del avance a largo_acum para ir recolectando el total. El hashtable largo se mantiene intacto porque la primera vez que pasó un avance de este sondaje, ya se seteó esa variable
  46.                 */
  47.                
  48.                 if (largo.ContainsKey(reader["s_nombre"]))
  49.                 {  
  50.                     // seteo el largo_acum del sondaje actual como lo que ya tenía grabado + el largo del avance que estamos analizando, para ir generando el acumulado
  51.                     largo_acum[reader["s_nombre"]] = Convert.ToInt32(largo_acum[reader["s_nombre"]]) + Convert.ToInt32(reader["a_largo"]);
  52.                 }
  53.                 else
  54.                 {
  55.                     //si el sondaje al que pertenece el avance actual del reader no está contenido en el hashtable largo, entonces agregarlo
  56.                     //se agrega el par <nombre_sondaje>: <largo_sondaje>. Ej: "S07": 6500
  57.                     largo.Add(reader["s_nombre"], reader["s_largo"]);
  58.                     //se agrega el par <nombre_sondaje>: <largo_acum_sondaje>. Ej: "S07": 4300
  59.                     largo_acum.Add(reader["s_nombre"], reader["a_largo"]);
  60.                
  61.             }
  62.         }
  63.     }
  64.     catch
  65.     {
  66.         Console.WriteLine("Error!");
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement