Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between Linq to Sql, Linq, Typed Datasets, ADO.NET

I been wondering about this for a while. It seems like there are so many ways now I don't know when to use what? Or if there is even a point to learn them. Like I don't know if they basically do all the same things and just basically stick with one till you master it then maybe look at other ones.

So when I was taking an ASP.NET course that was part of my program.

We first did like ADO.NET where we just wrote everything with SQL statements in the code. We then moved onto a 3 tier architecture. This was done by making like classes and having datasets that return stuff.

The SQL was written in the class. I personally never really liked this way since I always found it annoying with trying to get the quotes right and just overall did not like it.

I then found on the Asp.net site their tutorial of 3 tier arch that I really liked. They where using typed data sets. You add the dataset file to you DAL folder and you would make table adapters and stuff through the GUI. You would then write you code in these GUI, I found it the perfect solution since now my SQL code was away from my code and I did not have to worry about quotes and all that stuff not being right or closing the connections and stuff plus it even had a SQL GUI builder!

Then I would just make file in the BLL folder and make a property to grab the table adapter and write my business layer logic.

The only thing I did not like was since it was typed if my stuff tried to return some new rows it would get mad.

So when I had to join tables I usually had to make a new table adapter.

Now there seems to be so many of them.

  • Linq -> what some people said would replace ADO.NET and some said it would not.
  • Linq to sql
  • ado.net

I am not sure if that is all of them probably not.

Before writing this post I did a quick check to see what linq to sql was about and saw some posts saying that MS was killing it off. They where from like 2008 so I don't know if this is true or not but I noticed that almost all the MVC books use like linq to sql so I don't think it is.

So is it worth switching to something a different one then typed datasets? Or are each used for different situations?

like image 599
chobo2 Avatar asked Jul 04 '09 10:07

chobo2


2 Answers

LINQ by itself is just a base technology ("Language Integrated Query") that's baked into C# 3.0 - it has nothing to do per se with databases. LINQ can be used against a variety of things - databases, XML, objects in memory, Entity Framework entities, Active Directory - you name it.

Linq-To-SQL is the lightweight, straightforward, MS-SQLServer only technology which allows you to use SQL Server tables easily and nicely as real objects in your .NET application. It's a "Object-relational mapper" that makes dealing with databases easier. It's SQL Server only, and Microsoft will not extend it much further - it's available, also in .NET 4.0, but won't be further developed any more.

ADO.NET is the base data access technology in .NET - it gives you access to a wide variety of data stores, relational and non-relational. It's the very basic technology - you deal with your data in a very low-level, raw manner.

On top of that, you have the ADO.NET datasets, which are a bit like Linq-to-SQL in that they make it somewhat easier to deal with databases. Contrary to Linq-to-SQL, you're not dealing with your objects from your domain model in your .NET code, but instead you're dealing with the database-oriented rows and columns just like they exist in the database. It's a more direct representation of what's in the database, it's on a lower level, it's very tightly coupled to your database layout, and it's not as "nice" and easy to use as Linq-To-SQL objects - you deal with lowlevel rows and columns and their values.

If you have the choice right now, and don't need anything but SQL Server, I would highly recommend checking out Linq-to-SQL - the mapping from the raw database tables to nice and easy to use .NET objects really makes your life a whole lot easier!

Marc

like image 190
marc_s Avatar answered Oct 07 '22 02:10

marc_s


To clarify the LINQ-to-SQL story; it isn't "dead" - it is very much a fully supported part of the .NET framework, and under active development (there is a LINQ-to-SQL team at Redmond).

The point is that the new feature development is mainly going into EF, including (hopefully) bridging the gap between LINQ-to-SQL (which is generally very popular) and EF (which has been criticised in a lot of ways).

For example, EF in 4.0 supports POCO objects, like LINQ-to-SQL.

Personally, I'm still a fan of LINQ-to-SQL, and would happily use it for new builds - but I would hide all of this behind a repository interface so that I can swap it at will, to any tool:

  • raw ADO.NET
  • LINQ-to-SQL
  • NHibernate
  • LLBLGenPro
  • Entity Framework

The one thing I wouldn't touch is DataSet ;-p

like image 28
Marc Gravell Avatar answered Oct 07 '22 00:10

Marc Gravell