Q:

What exception should I throw during data validation

I have a commercial program with an abstract employee class. This class has an abstract property called BaseSalary to be implemented in its derived classes according the employee type (cashier, supervisor, manager and so on). 
I want to validate data in the BaseSalary properties for a given range of salary depending on the position. 
What kind of exception should I throw when the salary doesn't match the requirements for that position job?

A:

Rather than throw exceptions, then write more code elsewhere to catch and handle them, explore not allowing out of range values at all:
Public Class Waitress
    Inherits Employee

    Public Sub New
       MyBase.GetsTips = True
       ' do other stuff including class specific params from wherever
       MyBase.MinSalary = minsalary from whereever you store it

       ' or maybe.....
       MyBase.MaxSalary = SalaryClass.GetMax(enumEmp.Waitress)

    End Sub
End Class

Elsewhere
If newSalary >= myWaitress.MinSalary AndAlso
      newSalary <= myWaitress.MaxSalary Then

     myWaitress.Salary = newSalary
End IF

In the real world, the range is often more complex than simply by department.  In addition to department, there might be training requirements, salary tiers, tenure requirements and so forth.  In that case, you might have a Salary class to help determine the correct range for this waitress (based on training etc etc etc), not simply any waitress:
If newSalary >= SalaryClass.GetMin(myWaitress) AndAlso
          newSalary <= SalaryClass.GetMax(myWaitress) Then

     myWaitress.Salary = newSalary
Else
     ' tell user that is an invalid amount
End IF    

