Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/08/2004, 09:59
Orioles
 
Fecha de Ingreso: agosto-2004
Mensajes: 37
Antigüedad: 20 años, 7 meses
Puntos: 0
Sonrisa DataRelation en vez de inner join?

Hola...

Estoy empezando con esto y estoy realizando pequeñas pruebas... En primer lugar, he realizado una consulta para capturar los datos de dos tablas creadas en sql server, consulta realizada con inner join y sin problemas... Ahora, estoy intentando hacer lo mismo pero con el objeto DataRelation... ¿es posible hacerlo o DataRelation es sólo para relaciones y tablas que "cree" con .net directamente?

El código que he implementado para obtener todos los libros del usuario '01' viene siendo el siguiente:
{
string SelStr1,SelStr2;
SelStr1 = "Select * from libro";
SelStr2 = "Select * from usuario where codigo_usuario='01'";

SqlCommand SelCom1,SelCom2;
SelCom1 = new SqlCommand(SelStr1,sqlConnection1);
SelCom2 = new SqlCommand(SelStr2,sqlConnection1);

sqlDataAdapter1.SelectCommand = SelCom1;
sqlDataAdapter2.SelectCommand = SelCom2;

//Creo un DataSet para contener los datos de las consultas anteriores
DataSet dsUnion;
dsUnion = new DataSet("dsLibrosDeUsuario");
dsUnion.Tables.Add("usuario");
dsUnion.Tables.Add("libro");

sqlConnection1.Open();
sqlDataAdapter1.SelectCommand.ExecuteNonQuery();
sqlDataAdapter1.Fill(dsUnion,"libro");
sqlDataAdapter2.SelectCommand.ExecuteNonQuery();
sqlDataAdapter2.Fill(dsUnion,"usuario");

//Se crean los objetos DataColumn de los dos objetos.
//Existe relacion 1:N entre usuarios y libros, por lo que la clave
//principal de usuario está también en la tabla libro
DataColumn parentCol,childCol;
parentCol = dsUnion.Tables["usuario"].Columns["codigo_usuario"];
childCol = dsUnion.Tables["libro"].Columns["codigo_usuario"];

//Se crea el objeto DataRelation para relacionar ambas tablas
DataRelation relLibrosDeUsuario;
relLibrosDeUsuario = new DataRelation("LibrosDeUsuario",parentCol,childCol) ;

dsUnion.Relations.Add(relLibrosDeUsuario);

sqlConnection1.Close();

return dsUnion;
}

El error que me sale es:
System.ArgumentException: No se puede habilitar esta restricción ya que todos los valores no tienen los valores primarios correspondientes.
at System.Data.DataRelationCollection.Add(DataRelatio n relation)

¿Qué estoy haciendo mal?

Gracias...