Convertir Objeto a DataSet

16/06/2005 - 23:15 por Kevin Guisbert S. | Informe spam
Hola a todos, quisiera que alguien por favor me ayude, tengo el siguiente
problema, bueno para tener buenas costumbres de programacion en VB.NET estoy
usando Option Strict On y ahora con esta opcion no puedo realizar conversion
de tipos no explicita ahora no se como convertir un objeto a DataSet, tengo
lo siguiente
Dim objDS as DataSet

objDS = Context.Cache("tablacache")

y aqui es donde me da el error, como puedo hacer la conversion??? la unica
solucion que vi es crear una funcion y luego ir llenando uno por uno el
dataSet con el contenido que tengo en Cache :( no creo que esa sea la
solucion por eso es que me encuentro preguntando aqui

Muchas gracias de antemano

Preguntas similare

Leer las respuestas

#6 Tristan
18/06/2005 - 11:16 | Informe spam
En realidad, kike, casi es más difícil encontrar una situación en la que sea
necesario CType. DirectCast se utiliza para hacer downcasting, es decir para
moverse en un sentido descendente de la herencia:

Por ejemplo:

Dim controles As New ArrayList
controles.Add(Button1)
controles.Add(TextBox1)
DirectCast(controles(0), Control).Text = "Botón visto como Control"
DirectCast(controles(1), TextBox).Text = "TextBox"


Es muy típico en eventos:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)
Handles Button1.Click
MsgBox(DirectCast(sender, Button).Name)
End Sub

En general, siempre que quieras ir de lo general a lo particular.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#7 Eduardo A. Morcillo [MS MVP VB]
18/06/2005 - 16:52 | Informe spam
Que yo sepa, siempre es más eficiente DirectCast.



Si. DirectCast es siempre mas eficiente para casts a los tipos del lenguaje.
En los demas casos es equivalente a CType.

Entiendo que CType tiene que hacer una comprobación de tipos, buscar
si existe un conversor para el tipo del objeto en tiempo de
ejecución, etc... ¿O crees que no es así?



No es asi, depende del tipo de destino y si el cast es desde Object o no. Si
usas CType para hacer un cast de Object a Byte, Char, Date, Decimal, Double,
Integer, Long, Short, Single o String, el CType es convertido a una la
llamada a las clases correspondientes de
Microsoft.VisualBasic.CompilerServices, mientras que si el cast es a otros
tipos es convertido a un castclass de MSIL, que es lo mismo que el
DirectCast. Tambien tiene una diferencia en que el compilador, de ser
posible, chequea que pueda realizarse el cast. Por ejemplo si tienes esto:

Dim o1 As New Clase1
Dim o2 As Clase2

o2 = CType(o1, Clase2) ' Error en compilacion
o2 = DirectCast(o1, Clase2) ' Error en ejecucion

Juntando ambas cualidades uno podria esperar que CType detectara si la clase
implementa la interface IConvertible y llamara al metodo correspondiente,
pero no lo hace.

Lo que me sorprende, es que en casi todos los ejemplos de Microsoft
en los que se necesita downcasting, utilizan CType en lugar de
DirectCast.



Bueno, lamentablemente los ejemplos de Microsoft a veces dejan mucho que
desear.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#8 Raul Carrillo aka Metsuke
11/08/2005 - 03:46 | Informe spam
Solo una pregunta que me esta volviendo loco y no veo la forma (seguro que
es obvia, debo estar bloqueado), en mi caso, el nombre de la clase a la que
queremos convertir obj esta almacenada como cadena String, pues viene de una
seleccion en un combo ¿hay forma de hacer DirectCast pasando como segundo
parametro el nombre de la clase a la que convertir y no el "type object"?

En codigo

Dim strConvertirA as String = "MiClase"
Dim obj as Object = "Hola"
Dim obj2 as MiClase = DirectCast (obj, <aqui es donde no acierto a convertir
el string en un objeto type valido>)

... seguro que es tan obvio que me dare de bofetadas despues, pero no
consigo verlo...

Gracias de antemano.

Saludos

Raul Carrillo aka Metsuke


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
Respecto a lo que has puesto cual podria ser un ejemplo para utilizar
el DirectCast, es decir, que no veo muy clara la utilidad del
DirectCast.



DirectCast es mas rapido que CType en los casos donde lo que este guardado
en la variable tipo Object sea del tipo al que se quiere convertir. Por
ejemplo en el siguiente caso seria preferible DirectCast por ser mas
eficiente:

Dim obj As Object = "Hola"
Dim str1 As String = CType(obj, String)
Dim str2 As String = DirectCast(obj, String)

Como decia en el mensaje anterior, esto se aplica a los tipos del
lenguaje, cuando hablamos de clases los dos son iguales. Es decir si
tienes esto:

Dim obj As Object = New MiClase()
Dim obj1 As MiClase = CType(obj, MiClase)
Dim obj2 As MiClase = DirectCast(obj, MiClase)

No hay diferencia entre cual usas.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
#9 Eduardo A. Morcillo [MS MVP VB]
11/08/2005 - 05:20 | Informe spam
Solo una pregunta que me esta volviendo loco y no veo la forma
(seguro que es obvia, debo estar bloqueado), en mi caso, el nombre de
la clase a la que queremos convertir obj esta almacenada como cadena
String, pues viene de una seleccion en un combo ¿hay forma de hacer
DirectCast pasando como segundo parametro el nombre de la clase a la
que convertir y no el "type object"?



Si es hacer un cast, no tiene sentido lo que quieres hacer porque debes
tener declarada la variable con el tipo de destino. Entonces si sabes el
tipo de destino al momento de codificar directamente lo pones.

Ahora si lo que quieres es una verdadera conversion (por ejemplo de String a
MiClase) necesitas algo mas complejo. Como primera medida alguna de las
clases debera tener asociado un TypeConverter y este TypeConverter debera
implementar la conversion que quieres. Luego necesitaras obtener ese
TypeConverter para que realice la conversion y para ello usas el metodo
GetConverter de la clase TypeDescriptor pasandole el objeto. Lo unico que
falta es llamar a ConvertFrom (o ConvertTo) del TypeConverter. El Type
puedes obtenerlo desde el string mediante Type.GetType.
Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#10 Raul Carrillo aka Metsuke
11/08/2005 - 10:47 | Informe spam
Gracias, le echare un vistazo a fondo. Estaba claro que estaba totalmente
bloqueado y que lo que intentaba era una locura. Voy a reenfocar el
problema.

De nuevo gracias por la ayuda.

Saludos

Raul Carrillo aka Metsuke

"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
Solo una pregunta que me esta volviendo loco y no veo la forma
(seguro que es obvia, debo estar bloqueado), en mi caso, el nombre de
la clase a la que queremos convertir obj esta almacenada como cadena
String, pues viene de una seleccion en un combo ¿hay forma de hacer
DirectCast pasando como segundo parametro el nombre de la clase a la
que convertir y no el "type object"?



Si es hacer un cast, no tiene sentido lo que quieres hacer porque debes
tener declarada la variable con el tipo de destino. Entonces si sabes el
tipo de destino al momento de codificar directamente lo pones.

Ahora si lo que quieres es una verdadera conversion (por ejemplo de String
a MiClase) necesitas algo mas complejo. Como primera medida alguna de las
clases debera tener asociado un TypeConverter y este TypeConverter debera
implementar la conversion que quieres. Luego necesitaras obtener ese
TypeConverter para que realice la conversion y para ello usas el metodo
GetConverter de la clase TypeDescriptor pasandole el objeto. Lo unico que
falta es llamar a ConvertFrom (o ConvertTo) del TypeConverter. El Type
puedes obtenerlo desde el string mediante Type.GetType.
Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida