Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- String connection_string = ConsoleApplication1.Properties.Settings.Default.pruebaConnectionString;
- /*
- 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.
- 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}.
- Hashtable largo = new Hashtable(); // esto termina como {"S01": 14000, "S02": 4700, ...} al final del código
- Hashtable largo_acum = new Hashtable(); // esto termina como {"S01": 1000, "S02": 400, ...}
- */
- using (SqlConnection con = new SqlConnection(connection_string))
- {
- con.Open();
- try
- {
- String query = "SELECT sondajes.nombre as s_nombre, sondajes.largo as s_largo, avances.sondaje_id as a_s_id," +
- " (avances.profundidad_f - avances.profundidad_i) as a_largo from prueba.dbo.sondajes, prueba.dbo.avances" +
- " WHERE sondajes.id = avances.sondaje_id" +
- " ORDER BY sondajes.nombre;";
- /*
- La query devuelve esta estructura: <1><2><3><4>
- <1>: nombre del sondaje
- <2>: largo del sondaje
- <3>: sondaje_id del avance
- <4>: largo del avance (la resta entre profundidad_f y profundidad_i)
- */
- using (SqlCommand command = new SqlCommand(query, con))
- {
- SqlDataReader reader = command.ExecuteReader();
- while (reader.Read())
- {
- /*
- 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:
- - reader["s_nombre"]: el nombre de su sondaje padre
- - reader["s_largo"] : el largo del sondaje padre
- - reader["a_s_id"] : el id del sondaje padre
- - reader["a_largo"] : el largo del avance (que se calcula como la diferencia entre sus columnas profundidad_f y profundidad_i)
- La idea es que cuando el while termine, las dos hashtables tengan en sus keys todos los sondajes.
- 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
- */
- if (largo.ContainsKey(reader["s_nombre"]))
- {
- // 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
- largo_acum[reader["s_nombre"]] = Convert.ToInt32(largo_acum[reader["s_nombre"]]) + Convert.ToInt32(reader["a_largo"]);
- }
- else
- {
- //si el sondaje al que pertenece el avance actual del reader no está contenido en el hashtable largo, entonces agregarlo
- //se agrega el par <nombre_sondaje>: <largo_sondaje>. Ej: "S07": 6500
- largo.Add(reader["s_nombre"], reader["s_largo"]);
- //se agrega el par <nombre_sondaje>: <largo_acum_sondaje>. Ej: "S07": 4300
- largo_acum.Add(reader["s_nombre"], reader["a_largo"]);
- }
- }
- }
- catch
- {
- Console.WriteLine("Error!");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement