I've got a simple value object that we populate with data from an IDataReader (might be the effect of a query either to an Oracle or MS SQL database). The factory way of this object looks something similar to the next:

internal static SomeClass CreateFromDataReader(IDataReader data)
{
    string message = data.GetString(0);
    short id = data.GetInt16(1);
    DateTime dateStamp = data.GetDateTime(2);
    return new SomeClass(message, id, dateStamp);
}

Then i went right into a problem which relates to the main difference within the data type the Oracle and MS SQL databases use for your particular column: in Oracle that data type is number while for MS SQL the information type used is smallint.

Now, as i could 'fix' this issue by doing something similar to the next:

short id = Convert.ToInt16(data.GetValue(1));

it is possible to better or even more elegant method of carrying this out?

I'm not sure how ORMs take proper care of this type of scenario.

However, you need to use a kind that may accomodate both (all) cases for this type of area.
I checked out this table &lifier it appears decimal may be the appropriate .internet data type you could utilize.