The generic advice, which is more likely applicable than not, is that you should use something that provides both authenticity and confidentiality. Since neither ECB (or equivalently your "modeless" single-block encryption), CBC nor CTR provide authenticity, then the likely answer is that you should not use any of those, at least not by themselves. You should use an authenticated encryption algorithm.
Also, if you're thinking about modes of operation, there's a good chance that you're looking at your problem a the wrong level of abstraction. Your application wants an (authenticated) encryption algorithm; a block cipher is technically an encryption algorithm, but practically it should be seen as a building block that a cryptographer uses to design such algorithms. You shouldn't be thinking what block cipher mode should you use, but rather, what library for your language provides a set of secure and hard-to-misuse cryptographic algorithms.
See Bernstein, Lange and Schwabe's paper on the design of the NaCl library for an exposition of this philosophy.