Decimal[
^] IMO, however I often have it wrapped in another object. That way you can store currency type and other features you might need.
[EDIT - Seems you added after this repsonce]
Small money is not relavant in C#, just as SmallDate is not. If you are storing it as such in the DB you will need to check you values as the user enters them or before you send to the DB.
All the more reason you should wrap it in an object though. You could add some property that keeps track of the back storage type
public enum MoneyType
{
Small,
Large
}
Set the property on building of the money object. Then in the
Value
property setter you could check if it meets the constraints of small (that is if it is small), and handle how you want if it is not (i.e. error message, truncate, ignore etc.)