15.02.2015 Views

C# 4 and .NET 4

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>NET</strong> ❘ ChaPTer 30 cOre AdO.net<br />

PersisTing daTaseT Changes<br />

After editing data within a DataSet, it is usually necessary to persist these changes. The most common<br />

example is selecting data from a database, displaying it to the user, <strong>and</strong> returning those updates to the<br />

database.<br />

In a less “connected” application, changes might be persisted to an XML file, transported to a middle-tier<br />

application server, <strong>and</strong> then processed to update several data sources.<br />

A DataSet class can be used for either of these examples; what’s more, it’s easy to do.<br />

updating with data adapters<br />

In addition to the SelectComm<strong>and</strong> that a SqlDataAdapter most likely includes, you can also define an<br />

InsertComm<strong>and</strong>, UpdateComm<strong>and</strong>, <strong>and</strong> DeleteComm<strong>and</strong>. As the names imply, these objects are instances of<br />

the comm<strong>and</strong> object appropriate for your provider such as SqlComm<strong>and</strong> <strong>and</strong> OleDbComm<strong>and</strong>.<br />

With this level of flexibility, you are free to tune the application by judicious use of stored procedures<br />

for frequently used comm<strong>and</strong>s (say SELECT <strong>and</strong> INSERT), <strong>and</strong> use straight SQL for less commonly used<br />

comm<strong>and</strong>s such as DELETE. In general, it is recommended to provide stored procedures for all database<br />

interaction because it is faster <strong>and</strong> easier to tune.<br />

This example uses the stored procedure code from the “Calling Stored Procedures” section for inserting,<br />

updating, <strong>and</strong> deleting Region records, coupled with the RegionSelect procedure written previously,<br />

which produces an example that uses each of these comm<strong>and</strong>s to retrieve <strong>and</strong> update data in a DataSet<br />

class. The main body of code is shown in the following section.<br />

inserting a new row<br />

You can add a new row to a DataTable in two ways. The first way is to call the NewRow() method, which<br />

returns a blank row that you then populate <strong>and</strong> add to the Rows collection, as follows:<br />

DataRow r = ds.Tables["Region"].NewRow();<br />

r["RegionID"]=999;<br />

r["RegionDescription"]="North West";<br />

ds.Tables["Region"].Rows.Add(r);<br />

The second way to add a new row would be to pass an array of data to the Rows.Add() method as shown<br />

in the following code:<br />

DataRow r = ds.Tables["Region"].Rows.Add<br />

(new object [] { 999, "North West" });<br />

Each new row within the DataTable will have its RowState set to Added. The example dumps out the<br />

records before each change is made to the database, so after adding a row (either way) to the DataTable,<br />

the rows will look something like the following. Note that the right-h<strong>and</strong> column shows the row’s state:<br />

New row pending inserting into database<br />

1 Eastern Unchanged<br />

2 Western Unchanged<br />

3 Northern Unchanged<br />

4 Southern Unchanged<br />

999 North West Added<br />

To update the database from the DataAdapter, call one of the Update() methods as shown here:<br />

da.Update(ds, "Region");<br />

For the new row within the DataTable, this executes the stored procedure (in this instance RegionInsert).<br />

The example then dumps the state of the data, so you can see that changes have been made to the database.<br />

www.it-ebooks.info

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!