Sql – Data Access Layer newbie

data-access-layerdatasetlinq-to-sqlnet

Newbie to .NET data apps here, coming from a Visual Foxpro background.

I'm planning on an ASP.NET and/or Silverlight UI, and maybe some WPF client stuff too on our LAN too, so I want to craft a data access layer that can support all these front ends.

My data will be in SQL server. I have already made a test run of pushing the data from Foxpro to SQL Server 2005. It went well. That gave me a SQL server data store to play with.

Now, here are the data tools I played with so far, trying to get familiar with .NET data access:

  1. I've played with Linq-To-Sql, and made a test form using the typed objects and collections from L2S, and then populating some WPF listviews and other UI controls. That was cool. Linq is cool! WPF is cool. See screenshot of form here: http://twitpic.com/26w26/full

  2. I've played with what I guess you'd call classic ADO.Net DataSets. Man, DataSets seem like a lot of work…
    A SQLConncetion
    A SQLCommand
    A DataSet
    A TableAdapter

…and worst of all, I had to type SQL code within quotes, with absolutely no help from the IDE to to keep me from making typing errors, or writing just plain wrong SQL code, and I had to know the columns names from my data table every time. Lots of room for errors! And query parameters, yuck.

So, let me ask…. does the .NET developer community really work with SQLCmds, DataSets, and DataTables to read and write data? Is that how it works?

I know all about the O/RM battles out there, and EF too.

It sure looks like you can hook up any of the UI controls from ASP.NET/Silverlight/WPF/and WinForms to either Object collections (via OR/M) or DataSets/DataTables, right? Is it always a choice between one of those two?

So, it's decision time for me, but, I don't know that to choose. They all seem to work, but that darn DataSet thing just seems scary to me, but, somehow, it also seems to be commonly used.

Best Answer

I have used the classic old ADO.NET for many years, and you just get used to it. For a larger application, you can invest some time in creating a data layer once, then re-use it with many other business objects.

A couple of other options:

  1. Strongly Typed datasets. You can create a strongly typed dataset that will allow you to drag and drop database objects and will generate a lot of the plumbing code for you.

2 linq To Sql designer, which also allows you to drag and drop objects into a designer, and generates a dbml file that you use to connect and manipulate your data.

I have recently gotten onto the Linq bandwagon and it does simplify your life when treating data as objects.

Good luck!