Vous êtes sur la page 1sur 6

Lm vic vi Disconnected Data DataSet v SqlDataAdapter Lesson ny hng dn cch lm vic vi d liu ngt kt ni (disconnected data) vi DataSet v SqlDataAdapter.

. Qua , bn s bit cch s dng DataSet, SqlDataAdapter v hiu ti sao cn phi lm vic vi disconnected data.

Gii thiu
Mt DataSet l mt i tng cha d liu trong b nh v c th gm nhiu bng. DataSet ch cha d liu ch khng tng tc vi ngun d liu. Thay vo , SqlDataAdapter s c dng qun l cc kt ni vi ngun d liu v cho chng ta ch lm vic disconnected. SqlDataAdapter m mt kt ni ch khi cn thit v ng n ngay sau khi tc v c hon thnh. V d, SqlDataAdapter thc hin cc tc v sau, khi d liu vo DataSet: 1. M kt ni 2. d liu vo DataSet (Fill) 3. ng kt ni V thc hin cc cng vic sau, khi cp nht d liu ngun vi thay i ca DataSet: 1.M kt ni 2.Ghi thay i t DataSet vo d liu ngun (Update) 3.ng kt ni Gia hai thao tc Fill v Update, cc kt ni vi ngun d liu c ng li v bn c th t do ghi, c d liu vi DataSet. y chnh l c ch ca m hnh lm vic vi disconnected data. Bi v ng dng sn sng kt ni khi cn thit, ng dng tr nn d pht trin hn

Hai kch bn minh ha cho l do ti sao bn cn lm vic vi disconnected data: ngi dng lm vic khng cn kt ni mng v gip Web site d pht trin hn. Hy xem xt vic nh kinh doanh cn d liu ca khch hng trong khi h i cng tc. Khi bt u ngy, h s cn ng b d liu vi database chnh ly cc thng tin cp nht mi

nht. Trong sut ngy hm , h s thc hin cc thay i trn d liu khch hng hin ti, thm khch hng mi, v nhp cc ha n mi. iu ny hp l v h c ngun d liu khch hng ring v nhng ngi khc khng th thay i trn cng dng d liu. Vo cui ngy, nh kinh doanh cp nht s kt ni vo mng v cp nht thay i cho tin trnh x l ban m. Kch bn khc l gip Web site d pht trin hn.Vi mt SqlDataReader, bn phi tr li database ly d liu mi khi xem mt trang. iu ny yu cu mt kt ni mi cho mi ln ti trang, n s nh hng ln n hiu sut khi s lng ngi dng tng ln. Mt cch khc phc iu ny l dng DataSet, ch cn cp nht mt ln v lu trong b nh tm (cache). Mi yu cu ti trang s kim tra cache v np d liu (t database) nu n khng tn ti hoc ly d liu ra khi cache v hin th n. iu ny gip hn ch truy xut database v tng hiu sut cho ng dng ca bn. Cc trng hp ngoi l cho kch bn trn bao gm cc trng hp bn cn cp nht d liu. Bn phi quyt nh, da trn cch d liu s c dng v chin lc ca bn. Dng disconnected data khi thng tin ca bn thng l read-only, nhng hy xem xt cc gii php thay th (nh dng i tng SqlCommand cp nht tc thi) khi bn yu cu mt vi th linh hot hn. Cng vy, nu s lng d liu qu ln lu trong b nh, bn s cn dng SqlDataReader c d liu.

To i tng DataSet
Khng c g c bit khi to mt DataSet. Bn ch cn to mt th hin mi, ging bt k i tng no: DataSet dsCustomers = new DataSet();

To mt SqlDataAdapter
SqlDataAdapter cha cc lnh SQL v i tng connection c v ghi d liu. Bn khi to n vi cu SQL select v i tng connection: SqlDataAdapter daCustomers = new SqlDataAdapter(select CustomerID, CompanyName from Customers, conn); Dng m trn to mt i tng SqlDataAdapter, daCustomers. Cu SQL select xc nh d liu no s c c vo DataSet. i tng connection, conn, nn c khi to t trc, nhng khng c m. l cng vic ca SqlDataAdapter m v ng connection khi phng thc Fill() v Update() c gi. SqlDataAdapter tt c lnh cn thit tng tc vi d liu ngun. Dng m trn xc nh cu lnh select, nhng khng cho thy cu lnh insert, update v delete. Chng s c thm vo SqlDataAdapter sau khi n c khi to. C hai cch thm cc lnh insert, update, delete: thng qua cc property ca SqlDataAdapter hoc vi mt SqlCommandBuilder. Trong bi ny, ti s cho bn thy

cch d nht lm iu ny vi SqlCommandBuilder. Trong bi sau, ti s s dng cc property ca SqlDataAdapter, cng vic ny s i hi nhiu bc hn nhng s gip bn hiu qu hn cch lm vic ca SqlCommandBuilder. y l cch thm cc lnh vo SqlDataAdapter vi SqlCommandBuilder. SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers); Lu rng dng m trn khi to mt i tng SqlCommandBuilder vi constructor cn mt tham s l SqlDataAdapter, daCustomers. iu ny gip SqlCommandBuilder bit i tng SqlDataAdapter no thm cc lnh vo. SqlCommandBuilder s c cu SQL select (ly t SqlDataAdapter), t suy ra cc lnh insert, update v delete, sau gn cc lnh mi vo cc property Insert, Update, Delete ca SqlDataAdapter tng ng. Nh ti cp t trc, SqlCommandBuilder c hn ch. N lm vic khi bn lm mt cu select n gin trn mt bng. Tuy nhin, khi bn cn kt hp hai hoc nhiu bng hoc thc thi mt stored procedure, n s khng lm vic.

d liu vo DataSet
d liu vo DataSet bn cn dng phng thc Fill() ca SqlDataAdapter, nh sau: daCustomers.Fill(dsCustomers, Customers); Phng thc Fill(), trong dng trn ly hai tham s: mt DataSet v mt tn bng. DataSet phi c to trc khi bn d liu vo n. Tham s th hai l tn ca bng s c to trong DataSet. Bn c th t bt k tn g cho bng. Thng thng, ti s tn bng trng vi tn gc ca n trong database. Tuy nhin, nu cu select ca SqlDataAdapter cha mt lnh join, bn s cn phi t mt tn r rng khc cho bng. Phng thc Fill() c mt overload chp nhn mt tham s l DataSet. Trong trng hp ny, bng c to s c tn mc nh l table1 cho bng u tin. S ny s tng dn (table2, tabl3,,tableN) cho mi bng thm vo DataSet nu nh tn bng khng c ch ra trong phng thc Fill().

S dng DataSet
Mt DataSet s gn d liu vo DataGrid ca ASP.NET v Windows form. y l mt v d s gn DataSet cho mt Windows forms DataGrid: dgCustomers.DataSource = dsCustomers; dgCustomers.DataMember = Customers; iu u tin chng ta lm, trong on m trn, l gn DataSet cho property DataSource

ca DataGrid. iu ny gip DataGrid bit n c d liu c gn vo, tuy nhin bn s thy mt du + trn GUI bi v DataSet c th gi nhiu bng v DataGrid cho php bn m rng ra xem mi bng trong . ch nh bng no c dng, gn property DataMember ca DataGrid bng tn ca bng. Trong v d, chng ta gn tn l Customers, l tn trng vi tn trong tham s th hai trong phng thc Fill() ca SqlDataAdapter. y l l do ti thch t tn bng trong phng thc Fill(), v n gip on m d c hn.

Cp nht thay i
Sau khi thay i c thc hin trn d liu, bn s cn ghi li vo database. Dng m sau cho thy cch dng phng thc Update ca SqlDataAdapter cp nht cc thay i vo database. daCustomers.Update(dsCustomers, Customers); Phng thc Update() trn c gi trn th hin ca SqlDataAdapter c tham s u tin l chnh i tng gi phng thc. Tham s th hai ca phng thc Update() ch ra bng no trong DataSet s c cp nht. Bng cha mt danh sch cc dng d liu b thay i v cc property Insert, Update, Delete ca SqlDataAdapter cha cc lnh SQL dng thc hin thay i database.

Kt hp tt c li
Ti by gi, bn thy cc phn cn thit qun l disconnected data. Ci bn cn l xem tt c cng vic trong mt ng dng. Listing 1 cho thy cch on m t cc phn trc c dng trong mt chng trnh hon chnh: Listing 1: Implementing a Disconnected Data Management Strategy PHP Code:
using using using using using System; System.Data; System.Data.SqlClient; System.Drawing; System.Windows.Forms;

class DisconnectedDataform : Form { private SqlConnection conn; private SqlDataAdapter daCustomers; private DataSet dsCustomers; private DataGrid dgCustomers; private const string tableName = "Customers"; // initialize form with DataGrid and Button public DisconnectedDataform() {

// fill dataset Initdata(); // set up datagrid dgCustomers = new DataGrid(); dgCustomers.Location = new Point(5, 5); dgCustomers.Size = new Size( this.ClientRectangle.Size.Width - 10, this.ClientRectangle.Height - 50); dgCustomers.DataSource = dsCustomers; dgCustomers.DataMember = tableName; // create update button Button btnUpdate = new Button(); btnUpdate.Text = "Update"; btnUpdate.Location = new Point( this.ClientRectangle.Width/2 - btnUpdate.Width/2, this.ClientRectangle.Height - (btnUpdate.Height + 10)); btnUpdate.Click += new EventHandler(btnUpdateClicked); // make sure controls appear on form Controls.AddRange(new Control[] { dgCustomers, btnUpdate }); } // set up ADO.NET objects public void Initdata() { // instantiate the connection conn = new SqlConnection( "Server=(local);DataBase=Northwind;Integrated Security=SSPI" ); // 1. instantiate a new DataSet dsCustomers = new DataSet(); // 2. init SqlDataAdapter with select command and connection daCustomers = new SqlDataAdapter( "select CustomerID, CompanyName from Customers", conn); // 3. fill in insert, update, and delete commands SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daCustomers); // 4. fill the dataset daCustomers.Fill(dsCustomers, tableName); } // Update button was clicked public void btnUpdateClicked(object sender, EventArgs e) { // write changes back to DataBase daCustomers.Update(dsCustomers, tableName); } // start the Windows form static void Main() { Application.Run(new DisconnectedDataForm());

Phng thc Initdata() trong Listing 1 cha cc phng thc cn thit thit lp SqlDataAdapter v DataSet. Lu rng cc i tng d liu khc nhau c nh ngha ti cp lp v th chng c th c dng trong nhiu phng thc. Property DataSource ca DataGrid c gn trong constructor. Khi ngi dng click nt Update, phng thc Update() trong s kin btnUpdateClickeds c gi, cp nht thay i vo li database. DataSet cha nhiu bng v c th lu trong b nh ti s dng. SqlDataAdapter cho php bn d liu vo mt DataSet v cp nht thay i vo database. Bn khng cn lo lng v vic m v ng SqlConnection bi v SqlDataAdapter t ng lm vic . Mt SqlCommandBuilder to ra cc cu lnh insert, update, delete da trn cu select ca SqlDataAdapter. Dng phng thc Fill() ca SqlDataAdapter d liu vo DataSet. Gi phng thc Update() ca SqlDataAdapter cp nht thay i vo li database.

Vous aimerez peut-être aussi