Originally Posted by
Shaggy Hiker
From the sound of it, you might as well rule out everything other than a database, confusing or not. Text would be fairly easy, and XML could be extremely easy, but neither one is going to work well for this, especially since the size could end up getting pretty large. With either of those, the only truly effective way to deal with the data would be to load ALL of it each time you run the program. That's fine for a small number of records, but it becomes prohibitive as the size increases. Databases, on the other hand, are designed to deal with that. The two that I would consider would be Access and SQL Server Express. Access has some real limitations, especially if you will either be working over a LAN, or will have multiple users. The advantage to Access is that it is relatively easy to use outside of the program. SQL Server Express would be a total pain to use outside of the program unless you were careful to get the version with Management Studio. Finding a free download of SQL Server Express from MS is easy, but finding one that includes the Management Studio is not always what you get on the first try, and Management Studio should be considered essential.
From the programming perspective, there is little difference between the two databases. In both cases, MS has tried to add lots of tools and mechanisms to make it easier to connect to, and interact with, the database. I'm not thrilled with any of these tools. Entity Framework would be the one to look at, if you wanted to choose one, as it is getting better and better. However, in all of these cases, I feel that MS has been creating a black box. Once you learn the tool, you can do simple things easily. Getting beyond those simple things can be quite challenging to start out with, though, because you have to wade through a bunch of generated code that you probably won't understand at first. For this reason, I prefer the old school method of creating a connection, creating a Command object from that connection, then either filling a datatable (or dataset, which is a collection of datatables), using a datareader (faster than a datatable, but read-only and forward-only), or getting a scalar (a single value from a single field). You can get everything done using those techniques, and they are fairly simple, but I would expect that you will find FAR more discussion on Entity Framework, LINQ2SQL, Datasources, TableAdapters, and strongly-typed datasets. You don't NEED any of those things, they were all attempts to make working with a database easier, but the result is that there are so many ways to deal with a database by now that it can easily be confusing when you are starting out.
I would also build the tables in the database, whether that is Access, or Management Studio. You could create them via code, but that will be painful and has no advantage.