F # y la colada ExecuteScalar
-
06-09-2019 - |
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
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.