F#和ExecuteScalar强制转换

时间:2009-06-02 05:13:28

标签: f# executescalar

如何使用F#中的DbCommand.ExecuteScalar?它返回一个我需要转换为int的obj。我对F#很新,我需要做的演员不清楚。

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

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

使用上传:?>抛出运行时错误。

3 个答案:

答案 0 :(得分:4)

如果你只是说

let o : obj = ...
printfn "%s" (o.GetType().ToString())
你得到了什么?它确实是一个int吗? (int32或uint32还是什么?)

:?> operator是正确的向下转换运算符,但您需要匹配的类型。在转换为实际类型后,如果需要从一个整数类型转换为另一个整数类型,则使用相应的函数作为目标类型,例如

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

答案 1 :(得分:0)

如果Downcast(:?>)在运行时抛出,则不会从Execute Scalar获取unit32作为返回值。你应该能够转换......

let stockid : uint32 = unit32 command.ExecuteStalar()

但如果你得到一些无法转换为uint32的东西,那也会失败。More on casting and converting here

答案 2 :(得分:0)

尝试将其转换为int32而不是uint32。 ExecuteScalar返回int32的对象。