In fairness, I don't know what's going on in FetchAllOrders - it might be programmed to behave well.
In practical experience, I've seen static classes used poorly to maintain the infrastructure needed to do data access. I say "poorly" because these implementations (that I've seen) were not made thread-safe. When the code was deployed to a multi-user environment (such as a web application), it exploded.
- Use static classes for classes that contain no state (and are threadsafe as a result). Classes with just methods, for example.
- Use static classes for classes where it is intended to make access serial with locks (threadsafe).
- Use static classes in throw-away code to avoid the design overhead of constructing/maintaining/passing instances.
Look into the .net framework and see which classes Microsoft made static and meditate on why.