David,
I just ran a test, and got the same thing...both when I called executescalar(), as well as when I set up a dataadapter to bring back a one row/one col datatable...and got a 2 both times instead of 1.8. When I run executescalar and look at the raw object that's returned, all I see is a 2.
I don't use the vfp ole db provider with C# anymore, there are critical limitations with it...so I use MSDE instead of VFP when I need something 'smaller' than SQL Server.
Maybe someone else has some insights as to this behavior, it sounds like maybe there's a storage allocation issue in bringing the value back, or maybe it needs to be declared differently to get it to work, I'm not sure. Sorry...
Kevin