Просто:
WHERE Type IN (2, 3, 4, 5, 6, 8, 13, 14, 16, 22) OR Type IS NULL
Но я совсем не уверен, что это то, что вы действительно хотите, или причина проблемы.
Если вы получаете исключение в коде C #, это не будет из предложения where.
Кстати, меня беспокоит тот факт, что ваше соединение, похоже, использует повторно существующую переменную. Плохая идея. Это почти наверняка должна быть локальная переменная. Вы также можете сделать свой код проще, вернув его из середины:
string sql = ...;
using (var cn = new SqlConnection(ConnectionString()))
{
cn.Open();
using (cmd = new SqlCommand(sql, cn))
{
cmd.CommandType = CommandType.Text;
return (int) cmd.ExecuteScalar();
}
}
Если проблема, как говорит Джейми, в том, что ExecuteScalar возвращает ноль, самый простой способ обойти это привести его к обнуляемому целому числу и использовать оператор объединения нулей:
return (int?) cmd.ExecuteScalar() ?? 0;