ADO.NET DataSets die SQL Kommandos mit Parametern enthalten setzen unter bestimmten Umständen die Datentypen der Parameter falsch. Bei der folgenden WHERE Bedingung wird der Paramter @ActiveOnly z.B. als String interpretiert:

WHERE
  (@ActiveOnly = 0 OR Active = 1)

Tauschen des Parameters und der Konstante löst das Problem:

WHERE
  (0 = @ActiveOnly OR Active = 1)

@ActiveOnly wird hier als Decimal interpretiert. Soll der Parameter ein Boolean sein, lässt sich das durch einen CAST erreichen:

WHERE
  (CAST(0 AS BIT) = @ActiveOnly OR Active = 1)