First you must understand what ADO.NET. It is an access layer between some data store (not limited to the database) and your .NET. application.In your case, to access the SQL Server information there is the ADO.NET layer that will intermediate between your database and your application. The Sqlcommand you mentioned is a ADO.NET architecture class that helps in this process.
The Dataset does not serve to access the database. Dataset abstracts this data external to the framework when in memory, being it independent of the data source. For example, when you make a request to the database:
SELECT * FROM PESSOAS WHERE PESSOAS.NAME LIKE 'COLETTA'
The database will process this SQL, and when it reaches the data access layer, it will store this information in memory, as an example in a Dataset or Datareader, according to the implementation.
With the Dataset structure, I can manipulate my data in memory with its Datatable and Datarelation, equal to the relational structure of the databases. Example:
//criando o dataSet;
DataSet exemplo = new DataSet("EXEMPLO");
DataTable peopleTable = exemplo.Tables.Add("PESSOAS");
peopleTable.Columns.Add("Name", typeof(string));
Note in this example that I created a table called PEOPLE with a column called Name. Now I can add records within this structure:
DataRow myRow = exemplo.Tables["PESSOAS"].NewRow();
myRow["Name"] = "COLETTA";
My example is really simple and wouldn’t be much use, but the idea is to exemplify how the structure is created. By creating these structures, you could insert into your Sql Server database using the SqlDataAdapter.Update(exemplo);
google will return you several tutorials on the subject, here in OS you can ask a more specific question about code, for example "How to fill the Dataset through a precedent?" , assuming you’ve tried some things and can show your code and where you’re doubtful. Just to clarify, Dataset is not used for access to the database, it stores data
– Ricardo Pontual