Your best option is to ensure that whatever you do, you keep the ability to change it later available. So if you go NHibernate or EF, you'll want the actual dependencies on the frameworks kept in a very tight are; same for manual-implementations.
Try implementing the Repository pattern, you could then build an NH-repo, EF-repo, etc, etc. and see which fits yours needs best.
My personal opinion is to do proper OR-Mapping (whether by hand or by framework)--the implication here is that your business/domain objects do not just look like your tables, and vice-versa. The whole point of an ORM isn't just to get data out of the database and into your application (DataSets were fine for that), but to let you take advantage of the best-of- both-worlds of OOP in your application and an RDBMS in your backend.
If you're just using SQL as "dumb-storage" (my favorite usage of it) then you could consider using an OODB or other object-persistance approach. This is always a fun thing to explore in hobby/side projects--but it's a hard case to sell to management (they looove their SQL Server), but it's worth a consideration.
Of course, if you're talking very small application, then perhaps you could implement something either following the Active Record pattern or perhaps the Transaction Script pattern--XScript is great for very small apps, but doesn't scale well--and Active Record is perfect for data-entry/CRUD applications