Ante todo, disculpas adelantadas por la explicación tan rara que he puesto en el anuncio. A ver si ahora me explico mejor...
Tengo dos bases de datos estadísticas: una en DB2, otra en SQL (accedo a ambas sin ningún tipo de problemas). La consulta que realizo sobre ellas me da una fecha y el número de impactos recibidos en la fecha en cuestión. No pongo las consultas (son un poco gordas), pero los campos que obtengo son
FECHA, IMPACTOSDB2 en la base de datos DB2
FECHA, IMPACTOSSQL en la base de datos SQL
Quiero mostrar estos datos en un único control (un DataList, por ejemplo), por lo que necesito "unir" las consultas. De estar en una misma base de datos, un LEFT JOIN bastaría, pero al estar en bases de datos distintas tengo que echar mano de las relaciones (a no ser que haya algún método alternativo)
En primer lugar, vuelco ambas consultas (una obtenida mediante un DB2DataAdapter, la otra mediante un SQLDataAdapter) en un DataSet
MyAdpDB2.Fill(MyDataSet, "ImpactosDB2")
MyAdpSQL.Fill(MyDataSet, "ImpactosSQL")
Seguidamente, realizo la relación pertinente, utilizando el campo FECHA (el cual es idéntico en ambos casos)
MyDataSet.Relations.Add("RelacionFechas", MyDataSet.Tables("ImpactosDB2").Columns("Fecha"), MyDataSet.Tables("ImpactosSQL").Columns("Fecha"), True)
La relación se realiza correctamente (a cada registro DB2 le corresponde un único registro SQL); esto lo compruebo con el siguiente código
Dim Fila1, Fila2 As DataRow
For Each Fila1 In MyDataSet.Tables("ImpactosDB2").Rows
Response.Write(Fila1("Fecha").ToString & "-" & Fila1("ImpactosDB2").ToString & " - ")
For Each Fila2 In Fila1.GetChildRows("RelacionFechas")
Response.Write(Fila2("Fecha").ToString & "-" & Fila2("ImpactosSQL").ToString & "<BR>")
Next
Next
El problema viene al pasar estos datos a un control, y es que no encuentro la manera de pasarlos todos
GridView1.DataSource = MyDataSet
GridView1.DataBind()
Esto, por ejemplo, sólo me carga en el GridView el contenido de la tabla en DB2 (la primera que he cargado en el DataSet)
GridView1.DataSource = MyDataSet.Tables("ImpactosSQL").DefaultView
GridView1.DataBind()
Aquí pasa lo contrario (obvio por otra parte, al hacer referencia directa a la tabla SQL)
He probado a meterle como DataSource la relación (que sería lo lógico), pero me da error
GridView1.DataSource = MyDataSet.Relations("RelacionFechas")
GridView1.DataBind()
Ignoro si es porque no se puede, o porque lo hago mal. La teoría es que si le cargo la relación, tendré un GridView con 4 columnas (las dos de DB2 y las dos de SQL), pero por ahora no lo he conseguido
¿Sabe alguien si lo que estoy intentando es utópico, o si hay alguna solución? A malas, ¿hay alguna manera de rellenar "a pelo" el GridView, utilizando el bucle que he mostrado antes?
Espero haber sido lo suficientemente claro en las explicaciones. Gracias a todos por adelantado