Pregunta

¿Cómo puedo utilizar DbCommand.ExecuteScalar de F #? Devuelve un obj, que necesito para convertir a un int. Estoy muy nuevo en F # y el casting que tengo que hacer no es clara.

let (stockid:uint32) = command.ExecuteScalar()

Compile Error: 
Type constraint mismatch. The type   obj is not compatible with type  uint32 

upcasting usando:?.> Arroja un error de ejecución

¿Fue útil?

Solución

Si usted acaba de decir

let o : obj = ...
printfn "%s" (o.GetType().ToString())

¿qué se obtiene? Es de hecho un int? (Int32 o uint32 o qué?)

El:?> Operador es el operador abatido correcta, pero es necesario para que coincida con los tipos. Después de convertir al tipo real, si usted necesita para convertir de un tipo entero con el otro, a continuación, utilizar la función correspondiente para el tipo de destino, por ejemplo.

let x : int = int myUnsignedInt  
// first 'int' is type, second is function to convert-to-int

Otros consejos

Si el Downcast (:?>) Lanza en tiempo de ejecución, no estás recibiendo un unit32 como valor de retorno de la Scalar Ejecutar. Usted debe ser capaz de convertir ...

let stockid : uint32 = unit32 command.ExecuteStalar()

Sin embargo, si usted está recibiendo algo que no se puede convertir en un uint32, que fallará también. Más en fundición y conversión de aquí .

Prueba a transmitir a int32 en lugar de un uint32. ExecuteScalar devuelve un objeto de int32.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top