Foros del Web » Programación para mayores de 30 ;) » .NET »

Error con el metodo FIND

Estas en el tema de Error con el metodo FIND en el foro de .NET en Foros del Web. Hola estoy tratando de usar el metodo FIND de un datarow de un dataset tipado y me tira el siguiente error An unhandled exception of ...
  #1 (permalink)  
Antiguo 16/06/2005, 17:30
 
Fecha de Ingreso: mayo-2005
Mensajes: 76
Antigüedad: 19 años
Puntos: 0
Error con el metodo FIND

Hola estoy tratando de usar el metodo FIND de un datarow de un dataset tipado y me tira el siguiente error

An unhandled exception of type 'System.Data.MissingPrimaryKeyException' occurred in system.data.dll

Additional information: Table doesn't have a primary key.


Pero lo extraño es que al esquema si le defini la clave primaria

El codigo que uso es el sigiente:

Código:
Function GetContacto(ByVal id As Integer) As SchemaContacto
        'Esto hereda la estructura del registro contacto
        Dim newContacto As SchemaContacto.ContactoRow = Contactos.Contacto.NewContactoRow
        Dim auxCont As New SchemaContacto
        'Busco el registro solicitado los campos del registro
        newContacto = Contactos.Contacto.Rows.Find(id)
        auxCont.Contacto.Rows.Add(newContacto)
        Return auxCont

    End Function
Contactos es el dataset tipado

y por las dudas paso la definicion del esquema:

Código:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="SchemaContacto" targetNamespace="http://tempuri.org/SchemaContacto.xsd" elementFormDefault="qualified"
	xmlns="http://tempuri.org/SchemaContacto.xsd" xmlns:mstns="http://tempuri.org/SchemaContacto.xsd"
	xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
	<xs:element name="Contacto">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="id" type="xs:integer" msdata:AutoIncrement="true" msdata:ReadOnly="true" />
				<xs:element name="Nombre" type="xs:string" msdata:ReadOnly="true" />
				<xs:element name="Telefono" type="xs:string" msdata:ReadOnly="true" />
				<xs:element name="Servicio" type="xs:string" msdata:ReadOnly="true" />
				<xs:element name="Nota" type="xs:string" msdata:ReadOnly="true" />
			</xs:sequence>
		</xs:complexType>
		<xs:key name="ContactoKey1" msdata:PrimaryKey="true">
			<xs:selector xpath="." />
			<xs:field xpath="mstns:id" />
		</xs:key>
	</xs:element>
</xs:schema>
  #2 (permalink)  
Antiguo 17/06/2005, 05:06
 
Fecha de Ingreso: mayo-2005
Mensajes: 76
Antigüedad: 19 años
Puntos: 0
X que?

mmm, lo que tuve que hacer es crear la clave primaria con codigo de esta manera:

Código:
NameFile = "Agenda.xml"
Contactos.ReadXml("Agenda.xml")
Contactos.Contacto.PrimaryKey = New DataColumn() {Contactos.Contacto.Columns("id")}
pero porque si esto esta definido en el esquema xml???

alguien lo sabe?
  #3 (permalink)  
Antiguo 17/06/2005, 05:09
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Pero así ya te funciona??
__________________
..:: moNTeZIon ::..
  #4 (permalink)  
Antiguo 17/06/2005, 07:52
 
Fecha de Ingreso: mayo-2005
Mensajes: 76
Antigüedad: 19 años
Puntos: 0
Si! funciona pero no se porque no me configura la clave primaria si yo la defino en el esquema, a esta parte como aclare la tengo que hace yo con codigo
  #5 (permalink)  
Antiguo 17/06/2005, 09:10
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
De hecho, cuando cargas datos en un dataset desde una BD, aunque la BD tenga relaciones y claves primarias creadas, han de crearse también en el dataset si quieres que éste tenga esa funcionalidad y respete las restricciones. Si no, al saltarte una restriccion (como eliminar un registro que todavía tiene hijos en otra tabla) te aparece el error de la BD directamente. Con lo que si lo defines en el dataset, evitas el error de la BD...

Bueno, mas o menos

Saludos.
__________________
..:: moNTeZIon ::..
  #6 (permalink)  
Antiguo 17/06/2005, 09:33
 
Fecha de Ingreso: mayo-2005
Mensajes: 76
Antigüedad: 19 años
Puntos: 0
OK, te entiendo.
Te explico yo estoy trabajando con archivos XML (sin BD) para persistir mi agenda y para esto cree un dataset tipado. Es decir defini el esquema con el diseñador de .NET y cree el dataset. Lo que yo no entiendo es que si yo defino la clave primaria en el esquema XML al generar el dataset tipado no la incluye en forma automatica, me entendes?
O no funciona asi y siempre lo voy a tener que definir yo?

Gracias por tus respuestas
  #7 (permalink)  
Antiguo 17/06/2005, 10:06
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
No hace falta la tiene que leer el dataset correctamente, así pues o estás definiendolo mal o cargandolo mal
  #8 (permalink)  
Antiguo 17/06/2005, 10:23
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
OK. Lo que dices tiene mucha lógica.
Todavía no he tenido la oportunidad de meterme a fondo con XML, la verdad.
En el caso de la BD, había tenido este problema, y en efecto, tengo que crear las restricciones sobre el Dataset, independientemente que existan en la BD.
Pero en el caso de un dataset tipado, se supone que, precisamente, ya le has indicado esas restricciones, que para algo es tipado no?

Espero que alguien pueda dar una explicación más lógica, la experiencia que tengo con XML es lo que di en el curso de MCAD solamente.
__________________
..:: moNTeZIon ::..
  #9 (permalink)  
Antiguo 17/06/2005, 23:50
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
No entiendo muy bien a que os haceis referencia con eso del dataset tipado. Yo cuando cargo un dataset de un XML utilizo dos para ello, uno que define el esquema y otro que contiene los datos.

Si en el XML que defilne el esquema, defines los valores no nulos, claves primarias, autoincrementales.... a la hora de cargarlo en el dataset, éste recoge todas esas propiedades, y si el XML que carga los datos es correcto (no viola ninguna de las restricciones), a funcionar sin problemas.
  #10 (permalink)  
Antiguo 18/06/2005, 06:00
 
Fecha de Ingreso: mayo-2005
Mensajes: 76
Antigüedad: 19 años
Puntos: 0
Un dataset tipado es un dataset con un esquema xml asociado. Y si es verdad cuando en el esquema definis los tipos de campo, autoincremento, etc. el dataset me toma todos esas definiciones ecepto el de clave primaria porque utilizo find y me aparece el error que mencione al inicio de la discucion
Supongo que lo debo estar usando mal.
Sigo investigando...
  #11 (permalink)  
Antiguo 19/06/2005, 08:56
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Puedes intentar utilizar el metodo select en vez del find

Código PHP:
Function GetContacto(ByVal id As Integer) As SchemaContacto
        
'Esto hereda la estructura del registro contacto
        Dim newContacto As SchemaContacto.ContactoRow = Contactos.Contacto.NewContactoRow
        Dim auxCont As New SchemaContacto
        '
Busco el registro solicitado los campos del registro
        newContacto 
Contactos.Contacto.Select("id='" id &"'")(0)
        
auxCont.Contacto.Rows.Add(newContacto)
        Return 
auxCont

    End 
Function 
Asi obtienes la fila con ese id, lo que no se si te dejará es hacer es:
auxCont.Contacto.Rows.Add(newContacto)
ya que newContacto es una fila de otra tabla.
  #12 (permalink)  
Antiguo 21/06/2005, 08:13
 
Fecha de Ingreso: mayo-2005
Mensajes: 76
Antigüedad: 19 años
Puntos: 0
Bueno por fin lo hice funcionar!
Estaba generando mal el esquema xml: lo que hice es leer mucha doocumentacion de microsoft pero ahora ya funciona bien.
Me crea un metodo Findbyid y ahora si puedo buscar en el dataset con este metodo.

Gracias a todos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:15.