You are on page 1of 154

Li ni u

Trc khi bn c ti liu ny, ti cng xin gii thiu cht t v ngun gc ca n. y l mt ti liu free trn mng ta Mastering C# Database Programming ca Jason Price , ni dung tp trung ch yu vo lp trnh c s d liu vi ngn ng lp trnh C#, ssh trnh by chi tit cn k v c km theo nhng v d sinh ng gip ngi c d dng nm bt cc kha cnh ca vn . C l ca tc gi khi vit sch ny l dnh ring cho nhng ngi c hiu bit v ngn ng lp trnh ni chung v nht l ngn ng lp trnh C# ni ring. Nu bn cha bit g v ngn ng lp trnh C# ,c l bn nn nghin cu n trc khi c ti liu ny. Ti liu v ngn ng lp trnh C# vit bng ting vit c vi cun trn mng, nhng nhng ti liu chuyn su v lp trnh Windows Form, lp trnh c s d liu vi C# dng nh qu him hoi. Trong khi nhng ti ny vit bng ting anh th rt nhiu, i vi nhng bn yu thch lp trnh m km ngai ng th nh b tay. y l mt ti liu vit bng ting anh , tuy rng trnh anh ng ca ti cng c gii hn, nhng v am m lp trnh nn ti cng quyt nh dch ti liu ny, mt l ng gp mt cht cng sc cho nhng bn c cng am m nh ti, hai l rt mong mi nhng bc thy trong lng IT ch gio cho nhng g cha r rng hoc c sai xt trong bn dch anh em cng nhau hc hi Chn thnhcm n CVL @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Chng 1: Gii thiu v Lp trnh C s d liu vi ADO.NET


Tng quan
Mt C s d liu l mt tp hp c t chc ca thng tin c phn chia vo trong nhng bng. Mi bng li c chia thnh nhng hng v nhng ct ; nhng ct ny lu tr nhng thng tin thc t. Bn truy nhp mt c s d liu s dng ngn ng truy vn c cu trc (SQL), l mt ngn ng tiu chun c h tr bi a s phn mm c s d liu bao gm SQL Server, Access, v Oracle. Trong chng ny, bn s thy mt chng trnh C# kt ni ti mt c s d liu my ch phc v SQL, truy xut v hin th ni dung ct gi trong nhng ct ca mt hng t mt bng, ri ngt kt ni vi c s d liu. Bn cng s thy nhng chng trnh kt ni ti nhng c s d liu Access v Oracle . Bn cng s hc v cng c pht trin nhanh ng dng ca Microsoft (RAD) , Visual Studio .NET (VS .NET). VS .NET cho php bn pht trin, chy, v g li nhng chng trnh trong mt mi trng pht trin tch hp. Mi trng ny s dng tt c nhng c tnh ln ca Windows, nh con chut v nhng thc n nhanh, v tng nng sut ca bn nh mt lp trnh vin. Trong nhng mc cui cng ca chng ny, bn s thy cch s dng ti liu Microsoft rng ln i cng vi cng c pht trin phn mm .NET(SDK). v VS .NET. Bn s tm thy ti liu ny v gi khi bn tr nn mt chuyn gia vi ADO.NET v C#. Bn cng s hc cch s dng ti liu SQL Server nh th no. Nhng c trng trong chng ny: Phn mm cn thit Pht trin chng trnh ADO.NET u tin ca bn. S kt ni ti nhng c s d liu Access v Oracle Gii thiu v Visual Studio .NET S dng ti liu .NET. S dng ti liu SQL Server

Phn mm cn thit
Trc khi bn c th pht trin nhng chng trnh C#, bn s cn ci t .NET Software Development Kit (SDK) hoc VS .NET. Bn c th ti .NET SDK. ti http: // msdn.microsoft.com / downloads (tm kim cng c pht trin phn mm khung .NET ca Microsoft). Bn c th mua mt mt bn th hay bn copy y ca VS .NET t Microsoft ti http: // msdn.microsoft.com / vstudio. ci t .NET SDK, Chy tp tin kh thi bn ti xung v theo nhng ch dn trn mn nh ci t n trn my tnh cc bn. ci t VS .NET, chy file setup.exe trn a v theo nhng ch dn trn mn nh. Bn cng s cn mt bn sao ca phn mm c s d liu SQL Server. Vo thi im ang ghi bn c th ti xung mt phin bn th ca SQL Server t Microsoft ti http: // www.microsoft.com / sql. Bn c th cng mua mt phin bn th hay bn sao y ca SQL Server t trang web ca Microsoft. Sch ny s dng phn mm Phin bn ngi pht trin ca SQL Server 2000 (Developer Edition of the SQL Server 2000 ) v s dng mt c s d liu tn Northwind. C s d liu ny cha ng thng tin cho Cng ty Northwind tng tng, bn nhng sn phm thc n ti nhng khch hng. Northwind l mt trong s nhng c s d liu v d m bn c th ci t vi SQL Server. Thng tin khch hng trong c s d liu Northwind l nhng khch hng c tn c lu tr trong mt bng; bn s thy cch s dng bng ny trong chng trnh v d sau trong chng ny. Nu bn khng mun ti hay mua mt phin bn th ca SQL Server, .NET SDK (v VS .NET) i cng vi mt b dch v c s d liu my bn c lp c bit n nh Microsoft SQL Server 2000 (MSDE 2000). MSDE 2000 c mt phin bn ca c s d liu Northwind m bn c th s dng thay cho c s d liu Northwind SQL Server mc du bn s khng c c tt c nhng cng c qun tr th c trong SQL Server. Nu bn ang s dng .NET SDK. v mun ci t MSDE 2000, chn Start Microsoft. NET Framwork SDK Samples and QuickStart Tutorials . Nu bn ang s dng VS .NET v mun ci t MSDE 2000 , chy chng trnh setup.exe m bn dng ci t VS .NET v chn MSDE 2000 nh mt tnh nng mi ci t. Ghi ch bn c th hc nhiu hn v MSDE 2000 ti http: // www.microsoft.com / sql/ techinfo/ development/ 2000/ msde2000.asp.

Pht trin chng trnh ADO.NET u tin ca bn


Trong mc ny bn s bt tay vo vic lp trnh ADO.NET v s thy mt chng trnh C# thc hin nhng tc v sau y: 1. Kt ni ti c s d liu Northwind ca my ch phc v SQL 2. Truy xut mt hng t bng nhng khch hng (Customers) 3. Trnh by nhng ct ca hng 4. ng kt ni c s d liu Bn s c gii thiu ti nhiu khi nim trong mc ny , v n s hon ton c khm ph trong nhng chng sau . ng qu lo lng v tt c nhng chi tit ca nhng khi nim trong giai on ny; bn s hc nhng chi tit trong nhng chng sau. Danh sch 1.1 cho thy chng trnh v d , n c cha trong file FirstExample.cs. Danh sch 1.1: FIRSTEXAMPLE.CS /* FirstExample.cs minh ha cch: 1. kt ni vi c s d liu Northwind SQL Server . 2. truy xut mt hng t bng Customers s dng mt pht biu SELECT SQL. 3. hin th nhng ct t mt hng. 4. ng kt ni d liu. */

using System; using System.Data.SqlClient; class FirstExample { public static void Main() { try { // bc 1: to mt i tng SqlConnection kt ni ti // c s d liu Northwind SQL Server SqlConnection mySqlConnection = new SqlConnection( "server=localhost;database=Northwind;uid=sa;pwd=sa"); // bc 2: to mt i tng SqlCommand SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); // bc 3: gn thuc tnh CommandText ca i tng SqlCommand ti // mt pht biu SELECT SQL truy xut mt hng t bng Customers mySqlCommand.CommandText = "SELECT CustomerID, CompanyName, ContactName, Address "+ "FROM Customers "+ "WHERE CustomerID = 'ALFKI'"; // bc 4: m kt ni c s d liu s dng // phng thc Open() ca i tng SqlConnection mySqlConnection.Open(); // bc 5: to mt i tng SqlDataReader v gi phng thc ExecuteReader() // ca i tng SqlCommand chy pht biu SELECT SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(); // bc 6: c nhng hng t i tng SqlDataReader s dng // phng thc Read() mySqlDataReader.Read(); // bc 7: hin th gi tr nhng ct Console.WriteLine("mySqlDataReader[\" CustomerID\"] = "+ mySqlDataReader["CustomerID"]); Console.WriteLine("mySqlDataReader[\" CompanyName\"] = "+ mySqlDataReader["CompanyName"]); Console.WriteLine("mySqlDataReader[\" ContactName\"] = "+ mySqlDataReader["ContactName"]); Console.WriteLine("mySqlDataReader[\" Address\"] = "+ mySqlDataReader["Address"]); // bc 8: ng i tng SqlDataReader s dng phng thc Close() mySqlDataReader.Close(); // bc 9: ng i tng SqlConnection s dng phng thc Close() mySqlConnection.Close(); } catch (SqlException e) { Console.WriteLine("A SqlException was thrown"); Console.WriteLine("Number = "+ e.Number); Console.WriteLine("Message = "+ e.Message);

Console.WriteLine("StackTrace:\n" + e.StackTrace); } } } Ghi ch Bn c th ti tt c nhng tp tin ngun cho nhng chng trnh c trng trong sch ny t trang web ca Sybex ti www.sybex.com. Bn s tm thy nhng ch dn v vic ti nhng tp tin ny trong phn gii thiu ca sch ny. Mt khi bn ti xung nhng tp tin ny, bn c th theo nhng v d khng cn phi nhp nhng m chng trnh. Chng ta hy duyt qua nhng hng trong FirstExample.cs. Tp hp nhng hng u tin l mt ch thch cho bit ci m chng trnh lm /* FirstExample.cs illustrates how to: 1. Connect to the SQL Server Northwind database. 2. Retrieve a row from the Customers table using a SQL SELECT statement. 3. Display the columns from the row. 4. Close the database connection. */ Hai hng tip theo cho bit nhng namespaces c tham chiu trong chng trnh vi pht biu using: using System; using System.Data.SqlClient; Namespace "System" l namespace gc v c tham chiu chng ta c th s dng cch n gin nhng lnh gi Console .WriteLine() trong chng trnh, thay v phi ghi lnh gi hp cch y nh : System.Console.WriteLine() . Khng gian tn (namespace) cha nhng lp ADO.NET cho s s dng vi SQL Server, bao gm cc lp SqlConnection, SqlCommand, v SqlDataReader c s dng sau trong chng trnh. Bn s c gii thiu ti nhng lp ny khng lu na, v Bn s hc nhng chi tit y ca nhng lp ADO.NET khi bn tin trin thng qua sch ny. Bn x l nhng ngoi l m c l c tung ra trong m ca bn bi vic t m bn trong mt khi try/ catch . Bn s ch chn bc c t vo mt khi try/ catch trong phng thc Main() , vi khi catch x l mt i tng SqlException m c l c nm ra bi m trong khi try. Bn s hc nhiu hn v iu ny sau trong mc " X l nhng ngoi l " sau khi ti bn lun v chn bc trong nhng mc sau y.

Bc 1: To ra mt i tng SqlConnection kt ni ti C s d liu


Bn s dng mt i tng ca lp SqlConnection kt ni ti mt c s d liu my ch phc v SQL. Bc 1: trong phng thc Main() to ra mt i tng SqlConnection t tn mySqlConnection kt ni ti c s d liu Northwind my ch phc v SQL: SqlConnection mySqlConnection = new SqlConnection( "server=localhost;database=Northwind;uid=sa;pwd=sa"); Chui c chuyn n b khi dng SqlConnection c bit nh connection string v cha nhng phn t sau y: Server: ch r tn ca my tnh trn SQL Server ang chy- trong v d ny l localhost ; localhost l mt tn chung tham chiu ti my tnh m trn chng trnh ca bn chy. Nu c s d liu ca bn ang chy lu tr trn mt my tnh khc vi my tnh m chng trnh hin thi bn ang chy, th bn s cn phi thay th localhost vi tn ca my tnh . Database: ch r tn ca c s d liu - trong v d ny l Northwind. uid : ch r tn ti khon ca ngi s dng c s d liu : trong v d ny l sa ; sa l mt ti khan ca ngi dng c s d liu chung c qun l bi ngi qun tr c s d liu "database administrator" (DBA). Bn c th s dng bt k ti khon ngi s dng c s d liu no min l n c qun truy cp

ti c s d liu Northwind. pwd: ch r mt khu cho ngi s dng. Mt khu cho ngi s dng sa trong c s d liu ca ti cng l sa. Bn s cn thay i pwd thnh mt khu cho ti khon sa ca bn, hay bt c ti khon no bn ch nh uid. Bn s cn thay i nhng s thit t ca mt s hay tt c nhng phn t trc y trong chui kt ni ca bn. Bn c th cn lin h vi DBA (ngi qun tr c s d liu) ca bn ly thng tin v nhng phn t to ra chui kt ni ca bn. Mt khi bn c nhng gi tr ng, bn cn phi thc hin nhng s thay i ti chui kt ni trong bn sao ca FirstExample.cs ca bn vi nhng gi tr ng ny. Ghi nh: Mt ngi qun tr c s d liu (DBA) chi trch nhim thc hin nhng nhim v nh ci t phn mm c s d liu, sao lu nhng c s d liu, vn vn.

Bc 2: To ra mt i tng SqlCommand
Bc 2: to ra mt i tng SqlCommand t tn mySqlCommand c s dng sau gi mt pht biu SELECT cho c s d liu cho s thc thi. SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

Bc 3: Thit t thuc tnh CommandText ca i tng SqlCommand


Bn s dng SQL lm vic vi thng tin c ct gi trong mt c s d liu. SQL l mt ngn ng tiu chun cng nghip c h tr bi my ch phc v SQL, Access, v Oracle. Bn s dng pht biu SELECT SQL truy xut thng tin t mt c s d liu. Bn s hc nhng c s SQL trong phn gii thiu Chng 3, " Gii thiu ngn ng truy vn c cu trc." Bc 3: gn thuc tnh CommandText ca mySqlCommand to ra trong bc trc y ti mt pht biu SELECT. Pht biu ny s truy xut nhng ct CustomerID, CompanyName, ContactName, v Address t hng trong bng nhng khch hng c CustomerID l ALFKI: mySqlCommand.CommandText = "SELECT CustomerID, CompanyName, ContactName, Address "+ "FROM Customers "+ "WHERE CustomerID = 'ALFKI'";

Bc 4: M i tng SqlConnection
Bc 4: m kt ni c s d liu s dng phng thc Open() ca i tng SqlConnection to ra trong Bc 1: mySqlConnection.Open(); Mt khi kt ni ti c s d liu c m, bn c th gi nhng lnh cho c s d liu cho s thc thi.

Bc 5: Chy pht biu SELECT


Bn chy pht biu SELECT trc c gn trong mySqlCommand bi vic gi phng thc ExecuteReader() . Phng thc ny tr v mt i tng SqlDataReader v ri bn s dng c d liu hng c tr v bi pht biu SELECT. Bc 5: to ra mt i tng SqlDataReader v gi phng thc ExecuteReader() ca i tng mySqlCommand chy pht biu SELECT.

SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();

Bc 6: c hng s dng i tng SqlDataReader


Bc 6: c hng trong mySqlDataReader s dng phng thc Read(): mySqlDataReader.Read();

Bc 7: Trnh by nhng gi tr ct t i tng SqlDataReader


Bn c th c gi tr cho mt ct t mySqlDataReader bng cch chuyn qua tn ca ct trong cp du ngoc vung. Chng hn, mySqlDataReader[ " CustomerID "] tr v gi tr ca ct CustomerID. Bc 7: trnh by nhng gi tr ct cho CustomerID, CompanyName, ContactName, v Address: Console.WriteLine("mySqlDataReader[\" CustomerID\"] = "+ mySqlDataReader["CustomerID"]); Console.WriteLine("mySqlDataReader[\" CompanyName\"] = "+ mySqlDataReader["CompanyName"]); Console.WriteLine("mySqlDataReader[\" ContactName\"] = "+ mySqlDataReader["ContactName"]); Console.WriteLine("mySqlDataReader[\" Address\"] = "+ mySqlDataReader["Address"]);

Bc 8: ng i tng SqlDataReader
Khi bn kt thc vic c nhng hng t mt i tng SqlDataReader, ng n s dng phng thc Close(). Bc 8: gi phng thc Close() ng mySqlDataReader: mySqlDataReader.Close();

Bc 9: ng i tng SqlConnection
Khi bn kt thc truy cp c s d liu, ng i tng SqlConnection ca bn s dng phng thc Close(). Bc 9: gi phng thc Close() ng mySqlConnection: mySqlConnection.Close();

X l nhng ngoi l
Bn x l nhng ngoi l m c l c tung ra trong m ca bn bn trong mt khi try/catch. Bn s ch ti chn bc c t bn trong mt khi try/catch, vi khi catch x l mt i tng SqlException m c l c tung ra bi m trong khi try. Lp SqlException c bit dnh cho s s dng ca m truy cp mt c s d liu my ch phc v SQL. V d sau y trnh by cch xy dng mt khi try/catch try { /* on m c th gay ra mt li SqlException */ } catch (SqlException e) { Console.WriteLine("A SqlException was thrown"); Console.WriteLine("Number = "+ e.Number);

Console.WriteLine("Message = "+ e.Message); Console.WriteLine("StackTrace:\n" + e.StackTrace); } Nhng thuc tnh c trnh by trong khi catch nh sau: Number: S c trng cho li Message: Mt chui cha mt m t v li StakTrace: Mt chui cha tn ca lp v phng thc t i tng m li c tung ra. Hai v d chung nht v khi no mt SqlException c nm ra nh sau: i tng SqlConnection ca bn khng th kt ni ti c s d liu. Nu iu ny xy ra, bn cn phi kim tra chui kt ni ch nh s kt ni ti c s d liu ca bn nh th no. Pht biu SELECT ca bn cha mt li chnh t trong tn mt bng hay ct. u ra v d sau y cho thy nhng g xy ra khi i tng SqlConnection trong FirstExample.cs khng th kt ni ti c s d liu bi v c s d liu hin thi ang suy gim . A SqlException was thrown Mt li v kt ni tung ra Number = -2 M li = -2 Message = Timeout expired. Possible reasons: the timeout period elapsed prior Thng bo= kt thc thi gian ch kt ni. nguyn nhn c th: giai an thi gian ch kt ni to completion of the operation, the server is not responding, qua trc khi hon tt thao tc, my ch khng p ngkt ni or the maximum pool size was exceeded. Hoc ti mc cc i va b cha Please see the documentation for further details. StackTrace: at System.Data.SqlClient.SqlConnection.Open() at FirstExample.Main() Bn c th s dng u ra t khi catch xc nh vn . Nu c s d liu ang suy gim, lin h vi DBA (ngi qun l d liu) ca bn. Ghi nh: cho ngn gn, chng trnh ch s dng mt khi try/catch trong sch ny l FirstExample.cs. Bn cn phi s dng nhng khi try/catch trong nhng chng trnh ca mnh bt nhng ngoi l . bit thm nhiu chi tit v x l ngoi l hn, Ti xin gii thiu bn sch "Mastering Visual C# .NET from Sybex (2002).". Trong mc k tip bn s thy cch bin dch FirstExample.cs v chy n.

Bin dch v chy file FirstExample.cs


Bn c th bin dch chng trnh FirstExample.cs s dng cng c command-line i cng vi .NET SDK. hay VS .NET. Trong mc ny, bn s thy cch s dng phin bn dng lnh (command-line) ca trnh bin dch cho chng trnh FirstExample.cs nh th no. Sau trong chng ny, trong mc " Gii thiu v Visual Studio .NET", Bn s thy cch s dng VS .NET bin dch v chy mt chng trnh nh th no. Bn chy phin bn dng lnh (command-line) ca trnh bin dch bi vic nhp csc vo trong cng c du nhc lnh (Command Prompt ), theo sau l tn ca tp tin ngun chng trnh ca bn. Chng hn, bin dch FirstExample.cs, Bn nhp lnh sau y vo trong cng c du nhc lnh:

csc FirstExample.cs Nu bn mun theo cng vi nhng v d, khi ng cng c du nhc lnh bng cch chn Start > Programs > Command Prompt. Ghi nh: nu bn ang s dng Windows XP thay v Windows 2000, khi ng cng c du nhc lnh bng cch chn Start > All Programs > Accessories > Command Prompt. Tip theo, bn cn thay i nhng th mc ti ni m bn sao chp file FirstExample.cs . lm iu ny, u tin bn nhp vo phn vng (partition) trn a cng ca cc bn ni bn lu tp tin. Chng hn, chng ta hy cho l bn lu tp tin trong th mc ADO.NET\book\ch01\programs trong a C ca bn. truy cp a C , bn nhp hng sau y vo trong du nhc lnh v sau bn nhn phm Enter C: Tip theo, chuyn ti th mc ADO.NET\book\ch01\programs , bn nhp cd theo sau l ADO.NET\book\ch01\programs: cd ADO.NET\book\ch01\programs bin tp FirstExample.cs s dng csc, Bn nhp lnh sau y: csc FirstExample.cs Ch : tn ca tp tin ngun chng trnh theo sau csc; trong trng hp ny, n l FirstExample.cs. Nu bn nhn mt li khi chy csc, Bn s cn thm th mc ni bn ci t SDK vo bin mi trng ng dn ca bn. Bin mi trng ng dn ch r mt danh sch ca nhng th mc cha nhng chng trnh c th thc thi. Bt c khi no m bn chy mt chng trnh t du nhc lnh, nhng th mc trong bin ng dn c tm kim cho chng trnh bn mun chy. Th mc hin hnh ca bn cng c tm kim. gn bin mi trng ng dn ,bn thc hin nh sau: 1. Chn Start > Settings > Control Panel. Ri nhn p System v chn th Advanced . 2. Kch nt Environment Variables v nhn p Path t vng system variables y. 3. Thm th mc ni bn ci t SDK vo bin mi trng Path ca bn. 4. Kch OK lu s thay i ca bn, v kch OK ln na trn hp thoi k tip. 5. Khi ng li Command Prompt, nh th s thay i ca bn c chn. v Bn c th chy csc mt cch thnh cng. Trnh bin dch c file FirstExample.cs v bin dch thnh mt tp tin kh thi c tn FirstExample.exe. Tp tin loi EXE. cha nhng ch lnh m mt my tnh c th chy c, v phn m rng tp tin .exe cho bit tp tin ny l mt tp tin kh thi. Bn chy mt tp tin kh thi s dng cng c Command Prompt (du nhc lnh) bng cch nhp tn ca tp tin kh thi ny. Chng hn, chy file FirstExample.exe , bn nhp hng sau y trong du nhc lnh v sau bn nhn phm Enter FirstExample Khi bn chy chng trnh, nu thnh cng ,bn phi thy vn bn sau y c trnh by trong ca s du nhc lnh ca bn:
mySqlDataReader["CustomerID"] = ALFKI mySqlDataReader["CompanyName"] = Alfreds Futterkiste mySqlDataReader["ContactName"] = Maria Anders mySqlDataReader["Address"] = Obere Str. 57

Nu bn gp mt ngoi l- nh chng trnh ca bn khng th kt ni ti c s d liu- bn cn phi kim tra chui kt ni thit lp trong bc 1 ca FirstExample.cs, v lin h vi DBA (ngi quan tr d liu) ca bn nu cn thit .

Kt ni ti nhng c s d liu Access v Oracle


Trong mc ny bn s thy nhng v d ca vic kt ni ti mt c s d liu Access ln Oracle. tng tc vi nhng c s d liu ny trong chng trnh ca bn, bn s dng nhng lp t khng gian tn System.Data.OleDb. Khng gian tn ny cha nhng lp cho s s dng vi nhng c s d liu h tr s lin kt v s nhng i tng cho nhng c s d liu (OLE DB) nh Access v Oracle. Bn s hc nhiu hn v khng gian tn System.Data.OleDb trong Chng 5, "Tng quan v nhng lp ADO.NET ."

Kt ni ti mt c s d liu Access
Bn kt ni ti mt c s d liu Access s dng mt i tng OleDbConnection thay v mt i tng SqlConnection - vi mt chui kt ni ca nh dng sau y: provider=Microsoft.Jet.OLEDB.4.0;data source=databaseFile Vi databaseFile l ng dn v tn file ca c s d liu Access ca bn. Ch bn ch r provider ( nh cung cp) trong chui kt ni, n c gn l Microsoft.Jet.OLEDB.4.0. V d sau y to mt chui c tn connectionString vi nh dng thch hp kt ni ti c s d liu Northwind Access c lu tr trong file Northwind.mdb : string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;" + "data source=F:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb"; Ghi ch: Ch s dng ca hai k t du s ngc (\\) trong phn data source ca chui kt ni. Du s ngc u tin c dng ch nh du s ngc th hai s c i s nh k t; bi vy \\ c xem xt nh \ trong chui kt ni. Bn s cn nh v file Northwind.mdb trn a cng ca bn v thit lp chui kt ni ca bn cho ph hp. Gi thit namespace System.Data.OleDb c tham chiu (imported), v d sau y to mt i tng OleDbConnection, thng qua connectionString (thit t trong dng m trc y) ti b khi dng: OleDbConnection myOleDbConnection = new 01eDbConnection(connectionString); Danh sch 1.2 minh ha cch kt ni ti c s d liu Access Northwind s dng mt i tng OleDbConnection v truy xut mt hng t bng nhng khch hng nh th no. Ch bn s dng mt i tng OleDbCommand v OleDbDataReader chy mt cu lnh SQL v c nhng kt qu c tr v t mt c s d liu Access.
Danh sch 1.2: OLEDBCONNECTIONACCESS.CS

/* OleDbConnectionAccess.cs illustrates how to use an OleDbConnection object to connect to an Access database */ using System; using System.Data; using System.Data.OleDb; class OleDbConnectionAccess { public static void Main() {

// formulate a string containing the details of the // database connection string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;" + "data source=F:\\Program Files\\Microsoft Office\\Office\\Samples\\Northwind.mdb"; // create an OleDbConnection object to connect to the // database, passing the connection string to the constructor OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); // create an OleDbCommand object OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand(); // set the CommandText property of the OleDbCommand object to // a SQL SELECT statement that retrieves a row from the Customers table myOleDbCommand.CommandText = "SELECT CustomerID, CompanyName, ContactName, Address "+ "FROM Customers "+ "WHERE CustomerID = 'ALFKI'"; // open the database connection using the // Open() method of the OleDbConnection object myOleDbConnection.Open(); // create an OleDbDataReader object and call the ExecuteReader() // method of the OleDbCommand object to run the SELECT statement OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader(); // read the row from the OleDbDataReader object using // the Read() method myOleDbDataReader.Read(); // display the column values Console.WriteLine("myOleDbDataReader[\" CustomerID\"] = "+ myOleDbDataReader["CustomerID"]); Console.WriteLine("myOleDbDataReader[\" CompanyName\"] = "+ myOleDbDataReader["CompanyName"]); Console.WriteLine("myOleDbDataReader[\" ContactName\"] = "+ myOleDbDataReader["ContactName"]); Console.WriteLine("myOleDbDataReader[\" Address\"] = "+ myOleDbDataReader["Address"]); // close the OleDbDataReader object using the Close() method myOleDbDataReader.Close(); // close the OleDbConnection object using the Close() method myOleDbConnection.Close(); } } u ra t chng trnh ny nh sau: myOleDbDataReader["CustomerID"] = ALFKI myOleDbDataReader["CompanyName"] = Alfreds Futterkiste myOleDbDataReader["ContactName"] = Maria Anders myOleDbDataReader["Address"] = Obere Str. 57

Kt ni ti mt c s d liu Oracle
Bn kt ni ti mt c s d liu Oracle s dng mt i tng OleDbConnection vi mt chui kt ni vi khun dng sau y: provider=MSDAORA;data source=OracleNetServiceName;user id=username;password=password vi: OracleNetServiceName: ch r tn dch v mng c s d liu Oracle . Oracle Net l mt thnh phn phn mm cho php bn kt ni ti mt c s d liu qua mt mng. Bn s cn lin h vi DBA (ngi qun tr c s d liu) ca bn ly tn dch v Mng Oracle. username: ch r tn ca ngi s dng c s d liu . Password: ch r mt khu cho ngi s dng c s d liu. V d sau y to ra mt chui kt ni c tn connectionString vi nh dng chnh sc kt ni ti mt c s d liu Oracle: string connectionString = "provider=MSDAORA;data source=ORCL;user id=SCOTT;password=TIGER"; Ghi ch: ID ngi s dng l SCOTT vi mt mt khu l TIGER l mc nh cho s truy cp mt trong s nhng c s d liu v d i cng Oracle. C s d liu ny cha mt bng gi l emp cha d liu ngi lm thu mu. Gi thit namespace System.Data.OleDb c tham chiu, v d sau y to ra mt i tng OleDbConnection, thng qua connectionString ti b khi dng: OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); Danh sch 1.3 minh ha cch kt ni ti mt c s d liu Oracle s dng mt i tng OleDbConnection v truy xut mt hng t bng emp nh th no. Ch bn s dng mt i tng OleDbCommand v OleDbDataReader chy mt cu lnh SQL v c nhng kt qu c tr v t mt c s d liu Oracle. Danh sch 1.3: OLEDBCONNECTIONORACLE.CS /* OleDbConnectionOracle.cs illustrates how to use an OleDbConnection object to connect to an Oracle database */ using System; using System.Data; using System.Data.OleDb; class OleDbConnectionOracle { public static void Main() { // formulate a string containing the details of the // database connection string connectionString = "provider=MSDAORA;data source=ORCL;user id=SCOTT;password=TIGER"; // create an OleDbConnection object to connect to the // database, passing the connection string to the constructor

OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); // create an OleDbCommand object OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand(); // set the CommandText property of the OleDbCommand object to // a SQL SELECT statement that retrieves a row from the emp table myOleDbCommand.CommandText = "SELECT empno, ename, sal "+ "FROM emp "+ "WHERE empno = 7369"; // open the database connection using the // Open() method of the SqlConnection object myOleDbConnection.Open(); // create an OleDbDataReader object and call the ExecuteReader() // method of the OleDbCommand object to run the SELECT statement OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader(); // read the row from the OleDbDataReader object using // the Read() method myOleDbDataReader.Read(); // display the column values Console.WriteLine("myOleDbDataReader[\" empno\"] = "+ myOleDbDataReader["empno"]); Console.WriteLine("myOleDbDataReader[\" ename\"] = "+ myOleDbDataReader["ename"]); Console.WriteLine("myOleDbDataReader[\" sal\"] = "+ myOleDbDataReader["sal"]); // close the OleDbDataReader object using the Close() method myOleDbDataReader.Close(); // close the OleDbConnection object using the Close() method myOleDbConnection.Close(); } } u ra t chng trnh ny nh sau: myOleDbDataReader[ " empno "]= 7369 myOleDbDataReader[ " ename "]= Smith myOleDbDataReader[ " mui "]= 800

Gii thiu Visual Studio .NET


Trong nhng mc trc y, bn thy chng trnh m kt ni ti nhiu c s d liu, truy xut mt hng t mt bng, v hin th nhng gi tr ct cho hng ny trn mn hnh my tnh ca bn. Kiu chng trnh ny c bit nh mt ng dng console v n trnh by u ra trc tip trn mn nh trn chng trnh no ang chy.

Bn c th s dng Visual Studio .NET (VS .NET) to ra nhng ng dng console, cng nh nhng kiu ng dng sau y: Windows Applications : l nhng ng dng nm li th ca nhng iu khin trc quan cung cp bi h iu hnh windows, nh nhng thc n, nhng nt, v nhng hp vn bn son tho. Windows Explorer, m bn thng dng dn hng tp tin ca my tnh ca bn, l mt v d. Bn s hc v lp trnh Windows trong Chng 6, "Gii thiu nhng ng dng Windows v ADO.NET." ASP.NET Applications : Nhng ng dng ny chy qua Internet. Bn truy cp mt ng dng ASP.NET s dng mt b duyt web, nh Internet Explorer. Nhng v d ca nhng ng dng ASP.NET l cng vic ngn hng trc tuyn, thng mi c phn hay nhng h thng bn u gi. Bn s hc v lp trnh ASP.NET trong Chng 15, "Gii thiu v nhng ng dng: ASP.NET." ASP.NET Web Services: Nhng dch ny cng chy qua Internet. c bit nh nhng dch v mng XML, s khc nhau l bn c th s dng chng cung cp mt dch v c th c dng trong mt h thng phn tn ca nhng dch v lin kt vi nhau. Chng hn, dch v mng h chiu ca Microsoft a ra s nhn dng v s thm nh qun hn ca nhng ngi s dng Web v ri bn c th ri s dng trong ng dng Mng ca mnh. Bn s hc v nhng dch v mng trong Chng 17, "Nhng dch v Mng." y khng phi l mt danh sch ton din ca nhng kiu ng dng bn c th pht trin vi VS .NET, nhng n a cho bn hng v cho phm vi rng v nhng kh nng ca VS.NET . Trong phn cn li ca mc ny bn s thy cch pht trin v chy mt ng dng console s dng VS .NET. Nu bn c ci t VS .NET trn my tnh ca bn, bn s c kh nng thc hin nhng v d. Nu bn khng c VS .NET, ng lo lng; bn s vn cn c kh nng nhn thy nhng g ang din tin t nhng hnh nh c cung cp sau y.

Khi ng Visual Studio .NET v to mt D n


Tt c cng vic ca bn trong VS .NET c t chc vo trong nhng d n. Nhng d n cha ngun v nhng tp tin kh thi cho chng trnh ca bn, trong s nhng tit mc khc. Nu bn c ci t VS .NET, khi ng n bng cch chn Start > Programes > Microsoft Visual Studio .NET . Mt khi VS .NET bt u, bn s nhn thy trang Bt u "Start page" ( xem Hnh 1.1).

Hnh 1.1: trang Bt u

T trang Start page, bn c th nhn thy bt k d n hin hu no m bn to ra. Bn c th m v to nhng d n s dng nhng nt Open Project v New Project tng ng. Bn s to ra mt d n mi khng lu sau y.

S dng nhng lin kt VS .NET


Nh bn c th thy t Hnh 1.1, VS .NET cha mt s mi lin kt bn tri trn trang Start page. Mt s trong nhng mi lin kt ny cung cp s truy nhp ti thng tin hu ch trn Internet v .NET; nhng mi lin kt ny nh sau: Get started: m trang Start page. What's New : xem bt k cp nht no v VS .NET hay Windows. Bn cng c th xem nhng s kin hun luyn gn y v nhng hi ngh. Online Community (Cng ng trc tuyn) giao tip vi nhng thnh vin khc ca Cng ng Mng... Bao gm nhng mi lin kt ti nhng trang web v nhng nhm tin tc. Headlines : xem tin tc mi nht trn .NET. Search Online : Tm kim th vin trc tuyn MSDN cho vt cht k thut nh nhng bi bo c xut bn trn Mng. Downloads : Ti xung nhng ng dng th v nhng chng trnh v d t nhng trang web c trng y. XML Web Services : Tm nhng dch v mng XML ng k m bn c th s dng trong nhng chng trnh ca mnh. Nhng dch v mng XML cng c bit nh nhng dch v mng ASP.NET. Bn s hc nhiu hn v nhng dch v mng trong Chng 17. Web Hosting: Mt cng ty ch mt web site c th nm gi chng trnh ca bn v chy n cho bn. N ch n nhng my tnh m trn chng trnh ca bn chy. S dng mi lin kt Web Hosting xem nhng cng ty cung cp nhng dch v ny. My Profile : thit t nhng tit mc nh s bn phm yu cu v cch trnh by ca s ca bn . Kch nhng mi lin kt ny v khm ph thng tin c cung cp. Nh bn s nhn thy, l nhiu thng tin quanh. Mng(li) trn Internet.

To ra mt d n mi
Khi bn kt thc kho st thng tin trong nhng mi lin kt trc y, to mt d n mi bi kch nt New Project trn trang Get Started . Ghi ch: Bn c th cng to ra mt d n mi bi vic chn File > New > Project , hay bi vic nhn Ctrl+ Shift+ N trn bn phm ca bn. Khi bn to ra mt d n mi, VS .NET trnh by hp thoi New Project, m bn s dng chn kiu d n bn mun to ra. Bn cng nhp tn v v tr ca d n mi ca bn; V tr l th mc ni bn mun lu tr nhng tp tin cho d n ca bn. V bn ang chun b to ra mt ng dng console C#, chn Visual C# Projects t khu vc Project Types v bn tri hp thoi New Project , v chn Console Application t khu vc Templates (khun mu) bn tri. Nhp MyConsoleApplication trong trg Name, v gi th mc mc nh trong trng Location. Hnh 1.2 cho thy hp thoi D n Mi y vi nhng s thit t ny.

Hnh 1.2: hp thoi New Project vi nhng s thit t thch hp cho mt ng dng console C# Kch nt Ok to ra d n mi.

Lm vic trong mi trng VS .NET


Mt khi bn to ra mt d n mi, mn hnh pht trin chnh c trnh by ( xem Hnh 1.3). Mn hnh ny l mi trng trong bn s pht trin d n ca bn. Nh bn c th thy, VS .NET to on m bt u cho bn. M ny l mt khung sn cho chng trnh ca bn; bn s thy cch sa i n nh th no khng lu na. Trong mc ny, Ti s cho bn mt s m t ngn gn ca nhng phn khc nhau ca mi trng VS .NET.

Hnh 1.3: Mi trng VS .NET Ghi ch:

Ph thuc vo nhng s thit t ca bn cho VS .NET, mn hnh ca bn c th khc vi trnh by trong Hnh 1.3. Thc n (menu) VS .NET cha nhng mc sau y:

File Open, close, v save project files. Edit Cut, copy, v paste text from the Clipboard. Clipboard l mt vng nh tm thi trong ram. View Hide v show different windows nh Solution Explorer (n cho php bn xem nhng file tao thnh d n ca bn), Class View (n cho php bn xem nhng lp v nhng i tng trong d n ca bn), Server Explorer (cho php bn duyt qua nhng mc nh Databases), v Properties window (cho php bn gn thuc tnh cho i tng, nh kch c ca nt). Bn cng c th s dng View menu chn nhng thanh cng c bn mun hin th. Project thm nhng tp tin lp vo d n ca bn v thm nhng form ca s v nhng iu khin . Build Bin dch nhng file ngun trong d n ca bn Debug: chy chng trnh ca bn vi hoc khng c s chnh l. S chnh l cho bn bc qua tng dng chng trnh ca bn, tm kim nhng li. Tools : kt ni ti mt c s d liu v ty bin nhng s thit t cho VS .NET . Chng hn, gn nhng mu c dng cho nhng b phn khc nhau ca nhng dng chng trnh ca bn hay thit t cho trang ban u trnh by bi VS .NET khi bn chy n. Window : Chuyn i gia nhng tp tin bn m v n nhng ca s. Help : M ti liu trn. Mng. Bn s hc s dng ti liu ny sau trong chng ny trong mc "Using the .NET Documentation <LiB0011.html>."

Thanh cng c VS .NET cha mt lot nhng nt ng vai tr nh nhng phm tt ti mt s nhng ty chn thc n. Chng hn, bn c th lu mt file hay tt c cc file, ct v dn vn bn t Clipboard, v khi ng mt chng trnh s dng trnh g ri. Bn s hc s dng mt s nhng c tnh ny sau trong chng ny . M trnh by trong ca s ( di thanh cng c) vi tiu Class1.cs l m c t ng pht sinh bi VS .NET, V trong mc k tip bn s cn sa i m ny.

iu chnh m c pht sinh bi VS .NET


Mt khi VS .NET to ra d n ca bn, n s trnh by on m khi u no ng dng console vi mt tn lp l Class1.cs. Bn c th s dng m ny nh s khi u cho chng trnh ca mnh. Hnh 1.3, trc, trnh by on m khi u to bi VS .NET. Phng thc Main() to bi VS .NET nh sau: static void Main(string[] args) { // // TODO: Add code to start application here // } Nh bn c th thy, m ny cha nhng ch thch cho bit ni bn thm m ca mnh. Thay th phng thc Main() vi m sau y c ly t phng thc Main() trong FirstExample.cs, c ch ra trc trong Danh sch 1.1: public static void Main() { try { // step 1: create a SqlConnection object to connect to the // SQL Server Northwind database SqlConnection mySqlConnection = new SqlConnection( "server=localhost;database=Northwind;uid=sa;pwd=sa"

); // step 2: create a SqlCommand object SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); // step 3: set the CommandText property of the SqlCommand object to // a SQL SELECT statement that retrieves a row from the Customers table mySqlCommand.CommandText = "SELECT CustomerID, CompanyName, ContactName, Address "+ "FROM Customers "+ "WHERE CustomerID = 'ALFKI'"; // step 4: open the database connection using the // Open() method of the SqlConnection object mySqlConnection.Open(); // step 5: create a SqlDataReader object and call the ExecuteReader() // method of the SqlCommand object to run the SELECT statement SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(); // step 6: read the row from the SqlDataReader object using // the Read() method mySqlDataReader.Read(); // step 7: display the column values Console.WriteLine("mySqlDataReader[\" CustomerID\"] = "+ mySqlDataReader["CustomerID"]); Console.WriteLine("mySqlDataReader[\" CompanyName\"] = "+ mySqlDataReader["CompanyName"]); Console.WriteLine("mySqlDataReader[\" ContactName\"] = "+ mySqlDataReader["ContactName"]); Console.WriteLine("mySqlDataReader[\" Address\"] = "+ mySqlDataReader["Address"]); // step 8: close the SqlDataReader object using the Close() method mySqlDataReader.Close(); // step 9: close the SqlConnection object using the Close() method mySqlConnection.Close(); } catch (SqlException e) { Console.WriteLine("A SqlException was thrown"); Console.WriteLine("Number = "+ e.Number); Console.WriteLine("Message = "+ e.Message); Console.WriteLine("StackTrace:\n" + e.StackTrace); } } Ghi ch: Bn cng s cn thm dng sau y cnh an khi u ca lp ca bn: using System.Data.SqlClient; Mt khi bn thm m vo, nhng bc tip theo ca bn l bin dch v chy chng trnh .

Bin dch v chy Chng trnh s dng VS .NET


Nh thng thng, u tin bn phi bin dch chng trnh trc khi c th chy n. V nhng chng trnh trong VS .NET c t chc trong nhng d n, bn phi bin dch d n; vic ny cng c hiu nh xy dng d n . xy dng d n ca bn, chn Build > Build Solution. n bin dch file ngun Class1.cs thnh mt tp tin kh thi .exe. Mo nh: Bn cng c th nhn Ctrl+ Shift+ B trn bn phm xy dng d n ca bn. Cui cng, by gi bn c th chy chng trnh ca bn. Chn Debug Start Without Debugging . Khi bn chn Start Without Debugging, chng trnh s tm ngng ch cui, cho php bn xem u ra. Mo nh: Bn c th cng nhn Ctrl+ F5 trn bn phm chy chng trnh . Khi bn chy chng trnh , VS .NET s chy chng trnh trong mt ca s du nhc lnh mi, nh trong Hnh 1.4. Chng trnh ca bn c chy trong ca s ny bi v l mt ng dng console.

Hnh 1.4: chng trnh ang chy kt thc chng trnh, nhn bt k kha no. iu ny cng s ng ca s du nhc lnh. Bn ch va c khi qut b mt ca VS .NET trong mc ny. Bn s khm ph mt s nhng c tnh khc ca VS .NET sau trong sch ny. Trong mc k tip, bn s hc cch s dng ti liu rng ln i cng vi .NET.

S dng Ti liu Mng.


C hai NET SDK. v VS .NET n cng vi ti liu rng ln, bao gm tham kho y ti tt c nhng lp trong NET. Nh khi bn tr thnh chuyn gia vi C#, Bn s tm thy ti liu tham kho ny l v gi. Trong nhng mc sau y, bn s thy cch truy cp v tm kim ti liu Mng, v xem mt s ni dung ca ti liu nh th no. Ph thuc vo bn ang s dng NET SDK. hay VS .NET, bn truy cp ti liu vi mt cch hi khc nhau. Bn s hiu cch s dng c hai cch truy cp ti liu trong mc ny nh th no. Ghi ch: Ti liu i cng vi NET SDK. l mt tp con ca ti liu i cng VS .NET.

Truy cp Ti liu s dng Net SDK.


Nu bn ang s dng .NET SDK, Bn truy cp ti liu bng cch chn Start Programs Microsoft .NET Framework SDK Documentation . Hnh 1.5 trnh by NET Framework SDK document home page; y l trang bt u cho ti liu.

Hnh 1.5: trang ch ti liu bn tri ca trang, bn c th nhn thy nhiu mc n to ra ni dung ca ti liu. Bn c th xem ch s ca ti liu bi vic chn th Index (ch s) y trang. Mo nh: Bn cng c th xem ca s Index bi vic chn Help bn phm . Index, hay bi vic nhn Ctrl+ Alt+ F2 trn

Bn c th tm kim ch s bi vic nhp mt t trong trng Look For ca th Index. Hnh 1.6 cho thy nhng kt qu ca vic tm kim Console. Hnh 1.6 cng trnh by vn bn cho nhng chi tit v vic xy dng ng dng Console bn phi mn hnh. Ti m tng quan ny bi nhn p lin kt Building Console Applications trong nhng kt qu ch s y phi ca mn hnh.

Hnh 1.6: tm kim ch s cho t console Bn c th cng tm kim tt c cc trang trong ti liu s dng th Search . Bn trnh by th Search bi chn n y ca mn hnh. Mo nh: Bn cng c th xem ca s Search bi chn Help Search , hay bi nhn trl+ Alt+ F3 trn bn phm. Bn nhp nhng t Bn mun tm kim trong trng Look For ca ca s Search. Hnh 1.7 cho thy trang Search v kt qu tm kim tr v bi mt s tm kim cho WriteLine. Khi bn chy s tm kim, nhng tn ca nhng trang cha nhng t c yu cu ca bn c trnh by trong ca s kt qu Tm kim xut hin y mn hnh ( Bn c th xem ca s ny trong Hnh 1.7).

Hnh 1.7: Tm kim tt c ti liu cho t "WriteLine" Mo nh: Bn cng c th xem ca s kt qu tm kim bi vic chn Help Search , hay bi nhn Shift+ Alt+ F3 trn bn phm . Bn xem ni dung ca mt trang c bit c trnh by trong ca s nhng kt qu tm kim bi vic nhn p dng thch hp. Chng hn, Trong Hnh 1.7, chng ti nhn p dng th hai trong ca s kt qu tm kim. Dng ny cha trang vi tiu "Console.WriteLine Method," v nh bn c th thy, trang ny c trnh by trong ca s bn trn "Search Results" Hnh 1.7. Trong mc k tip, bn s thy cch truy cp ti liu - s dng VS .NET.

Vic truy cp Ti liu s dng VS .NET


Nu Bn ang s dng VS .NET, Bn truy cp ti liu s dng thc n Help. truy cp ni dung ca ti liu, bn chn Help Contents. Hnh 1.8 cho thy ni dung c trnh by trong VS .NET. Ch ti liu c trnh by trc tip trong VS .NET, thay v trong mt ca s ring bit, nh n lm khi xem ti liu vi NET SDK..

Hnh 1.8: ni dung ti liu c xem trong VS .NET Ghi ch Nhng phm tt bn phm ging nh vy c trnh by trong mc trc y cng ng dng cho VS .NET. Thc n Help cng cung cp s truy cp ti ch s (Index) v ca s tm kim tng t khi bn xem thy trong mc trc y.

S dng Ti liu SQL Server


My ch phc v SQL cng i cng vi ti liu in t rng ln. truy cp ti liu ny, bn chn Start Programs Microsoft SQL Server Books Online. Hnh 1.9 cho thy trang ch ti liu My ch phc v SQL.

Hnh 1.9: trang ch ti liu My ch phc v SQL Bn c th duyt nhng sch trc tuyn s dng th Ni dung (Contents), v Bn c th tm kim thng tin c bit s dng ch s (Index) v nhng th Search. Hnh 1.10 cho thy mt s thng tin cho pht biu SELECT, c nh v trong sch tham kho Giao dch-SQL.

Hnh 1.10: Ti liu v nhng v d SELECT Ghi ch : Giao dch- SQL l s thc thi y ca Microsoft ca SQL v cha nhng m rng lp trnh. Bn s hc v lp trnh Giao dch-SQL trong Chng 4.

Bn c th t xem thng tin trong Hnh 1.10 bi m Contents Transact-SQL Reference SELECT SELECT Examples.

Tm lc
Mt c s d liu l mt tp hp c t chc ca thng tin c chia vo trong nhng bng. Mi bng li c chia vo trong nhng hng v nhng ct ; nhng ct ny lu tr thng tin thc t. Bn truy cp mt c s d liu s dng ngn ng truy vn c cu trc (SQL), l mt ngn ng tiu chun c h tr bi a s phn mm c s d liu bao gm SQL Server, Access, v Oracle. Bn thy mt chng trnh C# kt ni ti mt c s d liu My ch phc v SQL, truy xut v trnh by ni dung c lu tr trong nhng ct ca mt hng t mt bng, v ri ngt kt ni vi c s d liu. Bn cng nhn thy nhng chng trnh kt ni ti mt c s d liu Access v mt Oracle. Cng c pht trin nhanh ng dng ca Microsoft l Visual Studio .NET(VS .NET). VS .NET cho php bn pht trin v chy nhng chng trnh trong mt mi trng pht trin tch hp. Mi trng ny s dng tt c nhng c tnh ln ca Windows, nh con chut v nhng thc n trc quan, v tng nng sut ca bn nh mt lp trnh vin. Trong nhng mc cui cng ca chng ny, bn thy cch s dng ti liu rng ln t Microsoft i cng vi dng pht trin phn mm .NET (SDK). v VS .NET. Bn cng thy cch s dng ti liu My ch phc v SQL nh th no. Trong chng k tip, bn s hc nhiu hn v nhng c s d liu. $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Chng 2: Gii thiu v nhng c s d liu


Tng quan
Trong chng ny, bn s hc v c s ca nhng c s d liu: cu trc ca nhng c s d liu nh th no, Lm sao to ra v lin h nhng bng, V lm sao xy dng nhng cu truy vn truy xut thng tin. Chng ny cng ch cho bn lm cch no s dng mt c s d liu My ch phc v SQL c tn Northwind. C s d liu ny cha thng tin cho mt Cng ty tng tng Northwind, bn nhng sn phm thc n. C s d liu ny l mt trong s nhng c s d liu v d c thit t vi SQL Server in hnh. Bn c th thu c mt phin bn th ca My ch phc v SQL t website ca Microsoft ti www.microsoft.com <http://www.microsoft.com>. Ghi ch: Trong thi gian ghi, bn c th ti phin bn th ca my ch phc v SQL t website ca Microsoft. Nu kt ni Internet ca bn qu chm, bn cng c th mua mt a CD-ROM cha phin bn th. Ti s dng phin bn pht trin ca My ch phc v SQL khi chun b sch ny. Khi chy mt h thng sn xut, bn cn phi s dng cch c trng phin bn Doanh nghip ca my ch phc v SQL. Bn c th xem nhng s khc nhau gia nhng kiu My ch phc v SQL Microsoft website. c trng trong chng ny: . . . . . Gii thiu nhng c s d liu S dng My ch phc v SQL Khm ph c s d liu Northwind Xy dng cu truy vn s dng Enterprise Manager (Qun tr doanh nghip) To ra mt bng

Gii thiu nhng c s d liu


Mt c s d liu l mt tp hp c t chc ca thng tin. Mt c s d liu quan h (relational database) l mt tp hp ca thng tin lin quan c t chc vo trong nhng cu trc c bit nh nhng bng. Mi bng cha nhng hng (rows) c sp xp vo trong nhng ct (columns). Bn cn phi quen thuc vi thng tin c tham chiu trong form ca mt bng vi nhng ct. Chng hn, Bng 2.1 cho thy nhng chi tit ca mt s sn phm c bn bi Cng ty Northwind. Bng 2.1 lit k ID ca sn phm, tn, s lng trn n v, v n gi cho 10 sn phm u tin; Bng 2.1: Mt s hng t Bng nhng sn phm PRODUCT ID NAME (m sn phm) (tn sn phm) 1 2 3 4 5 6 7 8 9 10 Chai Chang Aniseed Syrup Chef Anton's Cajun Seasoning Chef Anton's Gumbo Mix QUANTITY PER UNIT Unit Price (s lng trn n v) (n gi) 10 boxes x 20 bags 24-12oz bottles 12-550ml bottles 48-6oz jars 36 boxes $18 $19 $10 $22 $21.35 $25 $30 $40 $97 $31

Grandma's Boysenberry Spread 12-8oz jars Uncle Bob's Organic Dried Pears 12-1lb pkgs. Northwoods Cranberry Sauce Mishi Kobe Niku Ikura 12-12oz jars 18-500g pkgs. 12-200ml jars

Bn c th lu tr thng tin trong mt c s d liu trn giy trong mt t ng h s hay trong nh dng in t c lu tr trong b nh v h thng tp tin ca mt my tnh. H thng c dng qun l thng tin trong c s d liu l h qun tr c s d liu (database management system). Trong trng hp ca mt c s d liu in t, h qun tr c s d liu l phn mm qun l thng tin trong nhng b nh v h s ca my tnh. Mt v d v phn mm nh vy l My ch phc v SQL ( y l h qun tr c s d liu c quan h, hay RDBMS, s dng trong sch ny). Nhng th d khc v phn mm RDBMS bao gm Oracle v DB2. Ghi ch: Bn phi cn thn phn bit gia mt c s d liu v mt h qun tr c s d liu. Mt c s d liu l mt tp hp c t chc ca thng tin, v mt h qun tr c s d liu l phn mm ct gi v cung cp nhng cng c thao tc thng tin c ct gi. S phn bit ny b lm m trong nhng ngy gn y, v vy thut ng c s d liu thng c dng tham chiu ti phn mm. Vn khc bn cn thng thuc l mt m hnh c s d liu, l mt s trnh by ca cu trc d liu, v bao gm nh ngha ca nhng bng v nhng ct to thnh c s d liu. Trong mc k tip, bn s khm ph SQL Server.

S dng SQL Server


Trong mc ny, bn s khm ph vi cng c m bn s dng qun l SQL Server. c bit, bn s hc cch khi ng v dng Ngi phc v SQL s dng Trnh qun l dch v (Service Manager) v s dng Trnh qun l doanh nghip (Enterprise Manager) iu hnh SQL Server.

Khi chy v dng SQL Server

khi chy v dng Trnh phc v SQL, bn s dng cng c Service Manager . m Service Manager, bn chn Start Programs Microsoft SQL Server Service Manager. Service Manager c trnh by trong Hnh 2.1.

Hnh 2.1: ca s trnh qun tr dch v Bn chn tn ca my tnh ngi phc v trn Trnh phc v SQL ang chy trong hp danh sch th xung ca ca s trnh phc v. khi ng Trnh phc v SQL, bn kch nt Start/Contrinue. dng Trnh phc v SQL, bn kch nt Stop. Bn cng c th s dng Service Manager tm dng trnh phc v SQL , v chn nu bn mun t ng khi ng trnh phc v SQL khi h iu hnh khi ng.

S dng Enterprise Manager (trnh qun tr doanh nghip)


iu hnh mt c s d liu, bn s dng cng c Enterprise Manager. Bn c th s dng Enterprise Manager to nhng c s d liu, to v son tho nhng bng, to v son tho nhng ngi s dng, vn vn. m Enterprise Manager, bn chn Start Programs Microsoft SQL Server Enterprise Manager. Enterprise Manager c trnh by trong Hnh 2.2.

Hnh 2.2: Enterprise Manager Trong khung bn tri ca Enterprise Manager , bn s thy mt cy trnh by nhng s ci t My ch phc v SQL c th tip cn. Ni dung ca khung bn phi ca Enterprise Manager trnh by thng tin khc nhau da vo nhng g m bn chn trong khung bn tri. Chng hn, Ti chn th mc nhng c s d liu v c s d liu North-wind trong khung bn tri khi chun b Hnh 2.2. Nh bn c th thy, khung bn phi trnh by nhng biu tng cho php bn son tho nhng tit mc c lu tr trong c s d liu ny. Mi s ci t My ch phc v SQL cha by th mc sau c trnh by trong khung bn tri: Databases: cha nhng cng c cho php bn truy cp nhng c s d liu c qun l bi Ngi phc v SQL. Data Transformation Services : cung cp nhng truy cp ti cng c cho php bn di chuyn D liu t c s d liu ny sang c s d liu khc. Bn cng c th chuyn i d liu mt cch t ng khi n c di chuyn. Chng hn, bn c l mun di chuyn d liu t c s d liu Ngi phc v SQL n mt c s d liu Oracle, hay ngc li. Management: cha nhng cng c cho php bn sao lu nhng c s d liu ca bn, theo di hot ng c s d liu hin thi, v nhng nhim v khc. Replication: cung cp truy cp nhng cng c cho php bn sao chp thng tin t c s d liu ny sang c s d liu khc trong thi gian thc s dng mt qu trnh c bit nh bn sao (replication). Chng hn, bn c l mun di chuyn d liu t mt c s d liu ang chy ti mt chi nhnh ca mt cng ty n mt c s d liu ti tr s chnh. Security: cha nhng cng c cho php bn qun l nhng ng nhp v nhng vai tr gn sn cha nhng s cho php. Bn cng c th qun l nhng My ch phc v v nhng My ch phc v lin kt t xa. Nhng My ch phc v c lin kt l nhng c s d liu m bn c th truy cp qua mt mng. Nhng c s d liu ny khng phi l nhng c s d liu My ch phc v SQL; chng hn,chng cng c th l nhng c s d liu Oracle. S gii hn duy nht l phi c mt trnh cung cp DB OLE (s lin kt v nhng i tng cho nhng c s d liu) cho c s d liu ny. Nhng my ch phc v t xa l nhng c s d liu SQL Server m bn c th truy cp qua mt mng v chy nhng th tc lu tr trn . Support Services: Cung cp s truy cp ti nhng cng c cho php bn qun l Trnh phi hp Giao dch Phn tn (Distributed Transaction Coordinator), s tm kim ton b vn bn v nhng dch v bu chnh SQL. Dch v phi hp giao dch phn phi cho php bn qun l nhng giao dch s dng nhiu c s d liu. Dch v tm kim ton vn cho php bn thc hin tm kim nhng mnh thng qua

nhng s lng ln vn bn. Dch v bu chnh SQL cho php bn gi th in t t my ch phc v SQL. Meta Data Services : cha nhng cng c cho php bn qun l thng tin c lu tr trong kho cha a phng. Thng tin ny cha nhng chi tit v nhng c s d liu, nhng ngi s dng, nhng bng, nhng ct, nhng bng view, nhng th tc lu tr vn vn. Thng tin ny ch yu c s dng bi nhng ng dng kho d liu. Ghi nh: V y l mt sch v lp trnh c s d liu, Ti s khng bao trm qu nhiu chi tit v qun tr c s d liu; Ti s ch tp trung vo th mc nhng c s d liu . in hnh, t chc ca bn s c mt ngi qun tr c s d liu, hay DBA, l ngi chm sc iu hnh nhng c s d liu ca bn v s s dng nhng th mc khc thc hin nhng nhim v ca h. Nu bn cn nhiu chi tit v iu hnh My ch phc v SQL hn, Ti gii thiu bn sch "Mastering SQL Server 2000 by Mike Gunderloy and Joseph L. Jorden (Sybex, 2000)". Chng ta xem st k hn ti th mc nhng c s d liu, cha nhng c s d liu c qun l bi mt s ci t trnh my ch phc v SQL c bit. Chng hn, s ci t my ch phc v SQL ca ti qun l su c s d liu c tn master, model, msdb, Northwind, pubs, v tempdb. Khi bn m rng th mc nhng c s d liu cho mt c s d liu, bn s nhn thy nhng nt sau y: Diagrams : Bn s dng mt s lu tr mt s trnh by trc quan ca nhng bng trong mt c s d liu. Chng hn, c s d liu Northwind cha nhiu bng, bn bng c tn sau: Customers, Orders, Order Details, v Products. Hnh 2.3 minh ha mi lin quan gia nhng bng ny nh th no. Nhng ct thuc mi bng c trnh by bn trong mi hp trong s . Chng hn, bng nhng khch hng cha 11 ct: CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, v Fax. Nh bn s hc trong nhng mc " nhng mi quan h bng v nhng kha ngoi ", nhng ng ni gia nhng Bng cho thy nhng mi quan h gia nhiu Bng.

Hnh 2.3: nhng bng Customers, Orders, Order Details, v Products Tables: Bn s dng mt bng lu tr nhng hng c chia vo trong nhng ct. Hnh 2.4 cho thy mt danh sch ca nhng bng c ct gi trong c s d liu Northwind.

Hnh 2.4: nhng bng ca c s d liu Northwind Bn c th to ra nhng bng mi, xem nhng thuc tnh ca mt bng, v truy vn nhng hng ct gi trong mt bng. Bn s hc cch to ra mt bng mi nh th no sau trong mc "Creating a Table" . xem nhng thuc tnh ca mt bng, bn chn bng t danh sch trong khung bn phi, kch nt chut phi, v chn nhng thuc tnh t thc n nhy ng cnh s ra. Bn cng c th nhn p bng hin th nhng thuc tnh, v Hnh 2.5 cho thy nhng thuc tnh ca bng nhng khch hng. Bn s hc ngha ca nhng thuc tnh ny khi chng ny tin trin.

Hnh 2.5: nhng thuc tnh ca bng nhng khch hng Views : Bn s dng mt view truy xut mt tp hp ca nhng ct t mt hoc nhiu bng. Bn c th hiu mt view nh mt cch kho st linh hot hn nhng hng c ct gi trong nhng bng . Chng hn, mt trong s nhng views ca c s d liu Northwind truy xut mt danh sch xp theo vn ch ci ca nhng sn phm, v truy xut tn sn phm v tn lai, trong s nhng ct khc. Thng tin ny n t c bng Products ln bng Categories. Bn cng c th to nhng view mi, kho st nhng thuc tnh ca mt view, v truy vn nhng hng thng qua mt view. kho st nhng thuc tnh ca mt view, bn chn view ny, kch nt chut phi, v chn Properties. Bn c th cng nhn p view ny kho st nhng thuc tnh. Hnh 2.6 cho thy danh sch nhng thuc tnh xp theo vn ch ci ca bng view nhng sn phm . Vn bn ca view c

vit trong SQL, bn s hc nhiu hn trong Chng 3, cng vi cch s dng view trong Chng ny nh th no.

Hnh 2.6: danh sch theo vn ch ci ca nhng thuc tnh bng view nhng sn phm Stored Procedures: Bn s dng mt th tc lu tr chy mt chui ca nhng s pht biu trong c s d liu. Trong My ch phc v SQL, nhng th tc lu tr c vit vi Transact- SQL, m bn s hc v n trong Chng 4. Nhng th tc lu tr c ct gi trong c s d liu, v in hnh c s dng khi bn cn thc hin mt tc v ,tc v ny s dng c s d liu vi cng cao, hay bn mun tp trung mt hm trong c s d liu m bt k ngi s dng no c th gi hn l mi ngi s dng phi vit chng trnh ring ca mnh thc hin tc v ging nh vy. Chng hn, mt trong s nhng th tc lu tr trong c s d liu Northwind c tn CustOrdHist, n tr v tn sn phm v tng s lng ca nhng sn phm c t mua bi mt khch hng ring bit, ngi m c gi qua nh mt tham s ti th tc. Hnh 2.7 cho thy rng nhng thuc tnh ca th tc lu tr CustOrdHist .

Hnh 2.7: nhng thuc tnh ca th tc lu tr CustOrdHist Users: Mi khi bn truy cp c s d liu, bn kt ni ti mt ti khon ngi s dng ring bit trong c s d liu. Mi c s d liu SQL Server i cng vi hai ngi s dng mc nh c tn dbo v guest. Ngi s dng dbo s hu c s d liu v c nhng qun hn lm bt c iu g trong c s d liu, nh to ra nhng bng mi, sa i bng vn vn. Ngi s dng guest c nhng s gii hn v quyn hn - cho php s truy cp ti ni dung ca nhng bng, nhng khng th to ra hay sa i nhng bng, vn vn. Hnh 2.8 cho thy nhng thuc tnh ca ngi s dng dbo. Bn ch l ngi s dng dbo c coi nh c hai vai tr public v db_owner. Bn s hc v nhng vai tr tip theo. Bn c th xem tt c nhng quyn hn c gn ti ngi s dng dbo bi kch nt Permissions.

Hnh 2.8: nhng thuc tnh ngi s dng dbo Roles : Mt vai tr l mt tp hp c tn ca nhng qun hn m bn c th gn cho mt ngi s dng. N hu ch khi bn cn gn tp hp ging nh vy ca nhng qun hn ti nhiu ngi s dng. Cch ny, nu bn cn thay i tp hp ca nhng qun hn, bn ch cn thay i nhng qun hn c gn ti vai tr, hn l nhng qun hn gn ti mi ngi s dng. Chng hn, bn thy trong hnh trc y ngi s dng dbo c coi l c vai tr Public v db_owner. Hnh 2.9 cho thy nhng thuc tnh ca vai tr public . Bn ch l vai tr public cng c coi l ngi s dng khch (guest). Nu khng c vai tr public no c s dng, th tp hp ca nhng qun hn phi c b sung bng tay ti c dbo ln nhng ngi s dng khch (guest).

Hnh 2.9: nhng thuc tnh vai tr cng cng (public) Bn c th xem nhng qun hn c gn cho mt vai tr bi kch nt Permissions . Hnh 2.10 cho thy nhng thuc tnh c gn ti vai tr Public, v nhng danh sch 2.2 lit k nhng ngha ca nhng quyn hn sn c. Bng 2.2: ngha ca nhng quyn hn sn c Quyn hn ngha SELECT Cho php truy xut nhng hng t mt bng hay view.

INSERT Cho php thm nhng hng vo trong mt bng hay view. UPDATE Cho php sa i nhng hng trong mt bng hay view. DELETE Cho php loi b nhng hng t mt bng hay view. EXEC DRI Cho php thc thi mt th tc lu tr. Cho php thm hay loi b nhng rng buc, s ton vn, lin h, s khai bo(DRI) ti mt bng. Nhng s rng buc bo m rng nhng hot ng thch hp c s l khi thm, iu chnh, hay loi b nhng gi tr kha ngai. Nhng kha ngoi ch r mt ct trong mt bng lin quan n mt ct trong bng khc. Bn s hc v nhng kha ngoi nhiu hn trong nhng mc " Nhng mi quan h v nhng kha ngoi ".

Hnh 2.10: nhng quyn hn vai tr cng cng Rules : Mt quy tc l mt biu thc m nh gi tr ti true hay false v xc nh liu bn c th gn mt gi tr ring bit ti mt ct khng. Chng hn, bn c l nh ngha mt quy tc ch r mt phm vi ca nhng gi tr, v nu mt gi tr c cung cp bn ngoi phm vi ny, th bn khng th gn gi tr ti ct ny. Nhng quy tc c cung cp cho tnh tng thch vi nhng phin bn c hn ca SQL Server v by gi c thay th bi nhng rng buc. Bn s hc v nhng rng buc nhiu hn trong mc " To ra mt rng buc " tip sau . Defaults: Mt gi tr mc nh l mt gi tr ban u c gn khi bn thm mt hng mi vo mt bng. Nhng mc nh c cung cp cho tnh tng thch vi nhng phin bn c hn ca SQL Server v by gi c thay th bi gi tr mc nh ca mt ct. Bn s hc nhiu hn v nhng gi tr mc nh trong mc " To ra mt Bng " sau . User-Defined Data Types: nhng kiu d liu do ngi dng nh ngha cho php bn to ra nhng kiu ca mnh da vo nhng kiu SQL Server hin hu. Chng hn, cho l bn mun lu tr mt m ZIP code M trong vi bng ca c s d liu ca bn; bn c th to ra mt kiu lu tr mt chui nm k t. V ri nu bn mun tng chiu di t nm n tm lu tr mt m ZIP code m rng, th tt c nhng g bn cn lm l sa i kiu ca bn v s thay i s c phn nh trong tt c nhng bng ni bn s dng kiu ny. Full-Text Catalogs : nhng danh mc vn bn y cho php bn to ra mt ch s ton b vn bn, m cho php bn thc hin tm kim nhng mnh thng qua nhng s lng ln vn bn. Trong chng k tip, bn s thy Trnh duyt Server ca Visual Studio .NET cng cho php bn s dng nhiu c trng ging nhau cha trong th mc nhng c s d liu ca Enterprise Manager. c bit, Trnh duyt Server cho php bn xem, to ra, v sa i nhng mc sau y: nhng s c s d liu (database diagrams), nhng bng, nhng views , nhng th tc lu tr (stored procedures), v nhng hm do ngi dng

nh ngha. Trong mc sau y, bn s v ngha ca thut ng relational (c quan h) trong ng cnh ca mt c s d liu quan h, v bn s khm ph mt s nhng bng trong c s d liu Northwind.

Khm ph C s d liu Northwind


Mt c s d liu c th c nhiu bng, Mt s chng c lin h ln nhau. Chng hn, c s d liu Northwind cha nhiu bng, bn trong s c tn: Customers, Orders, Order Details, v Products. Hnh 2.11 l mt s lp li s c trnh by trc minh ha mi lin h ca nhng bng ny.

Hnh 2.11: nhng mi quan h gia nhng bng Customers, Orders, Order Details, v Products Nhng ct cho mi bng c trnh by bn trong mi hp. Chng hn, bng khch hng cha ng 11 ct:

CustomerID CompanyName ContactName ContactTitle Address City Region PostalCode Country Phone Fax

Trong vi mc k tip, bn s hc mt s l thuyt v c s d liu, ri bn s hc mi ct trong nhng ct trc y c nh ngha trong bng nhng khch hng nh th no. Bn cng s khm ph nhng bng Orders, Order Details, v Products

Nhng kha chnh


in hnh, mi bng trong mt c s d liu c mt hoc nhiu ct l duy nht xc nh mi hng trong bng. Ct ny c bit nh kha chnh cho bng. Mt kha chnh c th bao gm nhiu ct. Trong trng hp ny, l mt kha c bit nh mt kha t hp.

Ghi nh : gi tr cho kha chnh trong mi hng ca mt bng phi l duy nht (khng trng vi bt c gi tr kha chnh ca hng no khc). Trong trng hp ca bng nhng khch hng, kha chnh l ct CustomerID. Biu tng cha kha bn tri ca ct CustomerID trong Hnh 2.11 ch nh ct ny l kha chnh cho bng nhng khch hng. Tng t, kha chnh cho bng Orders l OrderID. Kha chnh cho bng Order Details c t hp t hai ct: OrderID v ProductID. Kha chnh cho bng Products (nhng sn phm) l ProductID.

Mi quan h Bng v nhng kha ngoi


Nhng ng ni nhng bng trong Hnh 2.11, trnh by trc , cho thy nhng mi quan h gia nhng bng. Du v cc () cui ca mi ng ch nh mt mi quan h mt- nhiu gia hai bng c ngha l mt hng trong mt bng c th lin quan n mt hoc nhiu hng trong bng khc. Chng hn, bng khch hng (Customers) c mt mi quan h mt- nhiu vi bng Orders (n t) . Mi khch hng c th t nhiu n t. Tng t, mi quan h mt- nhiu gia nhng n t (orders) v bng nhng chi tit n t (Order Details) c ngha l mi n t c th bao gm nhiu chi tit n t (bn c th hiu mt chi tit n t nh mt hng trong mt n lit k nhng mn hng , vi mi hng tham chiu ti mt sn phm ring bit c t mua). Cui cng, mi quan h mt- nhiu gia bng nhng sn phm (Products) v nhng chi tit n t (Order Details) c ngha l mi sn phm c th xut hin trong nhiu chi tit n t (Order Details). Nhng mi quan h mt- nhiu c m hnh ha s dng nhng kha ngoi. Chng hn, bng nhng n t c mt ct tn l CustomerID. Ct ny lin quan n ct CustomerID trong bng nhng khch hng thng qua mt kha ngoi. iu ny c ngha l mi hng trong bng nhng n t phi c mt hng tng ng trong bng nhng khch hng vi mt gi tr tng t nh ct CustomerID. Chng hn, nu mt hng trong bng nhng n t (Orders) c mt CustomerID l ALFKI, th cng phi c mt hng trong bng nhng khch hng (Customers) vi mt CustomerID l ALFKI. Do mi quan h gia nhng khch hng v nhng on t l mt- nhiu, iu ny c ngha l c th c nhiu hng trong nhng n t vi ct CustomerID ging nh vy. Da trn khi nim ny, Bn c th hiu kha ngoi nh mt con tr t bng nhng n t n bng nhng khch hng. Thng thng, bng cha kha ngoi c hiu nh bng con, v bng cha ct c tham chiu bi kha ngoi c hi nh bng cha. Chng hn, bng nhng n t l bng con, v bng nhng khch hng l bng cha. Nhng mi quan h kha ngoi thng c hiu nh nhng mi quan h cha con. Ghi ch: Thut ng relational (c quan h ) t relational database (c s d liu quan h ) n t thc t l nhng bng c th lin quan ln nhau thng qua nhng kha ngoi. Bn c th qun l nhng mi quan h cho mt bng vi Enterprise Manager (trnh qun l doanh nghip) bng cch chn Table t nt Tables , kch nt chut phi, v chn Design Table (Thit k bng). Ri bn kch nt Manage Relationships (Qun l nhng mi quan h) trn thanh cng c ca table designer (ca s thit k bng). Chng hn, Hnh 2.12 cho thy mi quan h gia bng nhng khch hng v nhng n t.

Hnh 2.12: Mi quan h gia bng Customers v Orders Nhng bng Customers v Orders c lin quan vi nhau thng qua ct CustomerID. Ct CustomerID trong bng nhng n t l kha ngoi. Mi quan h gia hai bng c gn tn l FK_Orders_Customers .

Nhng gi tr Null
Nhng c s d liu cng phi cung cp nhng kh nng x l nhng gi tr cha c gn vo, hay ni cch khc l cha c bit. Nhng gi tr cha c bit c gi l nhng gi tr Null (null values), v mt ct c nh ngha l: cho php hay khng cho php nhng gi tr null. Khi mt ct c cho php c nhng gi tr null, th ct ny c gn gi tr l null; ngc li n c nh ngha l not-null. Mt ct not-null trong mt hng phi lun c mt gi tr trong . Nu bn th thm mt hng nhng khng cung cp mt gi tr ti mt ct c nh ngha l not-null, th c s d liu s hin ra mt thng bo li v s thm hng mi ca bn tht bi.

Nhng ch s (Indexs)
Khi tm kim mt ti ring bit trong mt cun sch, bn c th duyt qua ton b cun sch tm kim ti ca cc bn, hay c th s dng ch mc ca sch tm trc tip v tr chnh xc ca ti. Mt ch s cho mt bng c s d liu cng tng t nh khi nim ch mc ca sch, ch c iu nhng ch s c s d liu c dng tm nhng hng ring bit trong mt bng. Downside (mt tim n?) ca nhng ch s l khi mt hng c thm vo bng, cn thit mt thi gian b xung cp nht ch s cho hng mi. Ni chung, bn ch cn phi to ra mt ch s trn mt ct khi bn thy l bn ang truy xut mt s t hng t mt bng cha nhiu hng. Mt kinh nghim tt l mt ch s hu ch khi bn mong i bt k cu truy vn n no truy xut 10 phn trm hoc t hn so vi tng s hng trong mt bng. iu ny c ngha l ct thch hp cho mt ch s cn phi c dng lu tr mt phm vi rng nhng gi tr. Mt ng c vin tt cho s ch s ha l mt ct cha mt con s duy nht xc nh cho mi bn ghi (hng), trong khi mt ng c

vin km cho s ch s ha l mt ct ch cha mt phm vi nh nhng m s nh 1, 2, 3, hay 4. S xuy xt ny ng dng cho tt c cc kiu c s d liu, khng phi ch ring cho nhng con s. Ghi ch: SQL Server t ng to ra mt ch s cho ct kha chnh ca mt bng. Bnh thng, DBA chi trch nhim to ra nhng ch s, nhng l mt ngi pht trin ng dng, bn chc chn bit nhiu v ng dng ca bn hn DBA v s c kh nng chn ra nhng ct no l nhng ng c vin tt cho s ch s ha. Bn c th qun l nhng ch s cho mt bng vi Enterprise Manager bng cch chn bng t (node) nt Tables, kch nt phi chut, v chn All Tasks Manage Indexes. Chng hn, Hnh 2.13 cho thy nhng ch s cho bng nhng khch hng. Bn cng c th qun l nhng ch s t table designer bi kch nt Manage Indexes/Keys.

Hnh 2.13: nhng ch s cho bng nhng khch hng Bng Customers c nm ch s: mi ci trn mi ct CustomerID, City, CompanyName, PostalCode, v Region columns. Bn s hc cch thm mt ch s vo mt bng nh th no trong mc " To mt ch s " sau.

Nhng kiu Ct
Mi ct trong mt bng c mt kiu c s d liu c th. Kiu ny tng t nh kiu mt bin trong C#, ngoi tr mt kiu c s d liu ng dng vo kiu ca gi tr m bn c th lu tr trong mt ct ca bng. Bng 2.3 lit k nhng kiu trong c s d liu SQL Server. Bng 2.3: nhng kiu trong c s d liu SQL Server Kiu d liu bigint int smallint tinyint bit M t Gi tr s nguyn t -263 (-9,223,372,036,854,775,808) to 263-1 (9,223,372,036,854,775,807). Gi tr s nguyn t -231 (-2,147,483,648) to 231-1 (2,147,483,647). Gi tr s nguyn t 215 (-32,768) to 215-1 (32,767). Gi tr s nguyn t 0 to 255. Gi tr s nguyn hoc 1 hoc 0.

decimal numeric money smallmoney float real datetime smalldatetime char varchar text nchar nvarchar ntext binary varbinary image cursor sql_variant table timestamp

gi tr s thp phn c chnh xc c nh t -1038 to 1038. Tng t decimal. Gi tr d liu tin t t -263 (-922,337,203,685,477.5808) to 263-1 (922,337,203,685,477.5807), vi chnh xc ti mt phn mi nghn ca mt n v tin t. Gi tr d liu tin t t -214,748.3648 to 214,748.3647, vi chnh xc ti mt phn mi nghn ca mt n v tin t. Gi tr kiu du chm ng t -1.79E+308 to 1.79E+308. Gi tr kiu du chm ng t -3.40E + 38 to 3.40E + 38. Gi tr ngy v gi t thng ging 1, 1753, n thng mi hai 31, 9999, vi chnh xc ti 3% ca giy (3.33 milli giy). Gi tr ngy thng v thi gian t Thng ging 1, 1900 n Thng su 6, 2079 vi chnh xc ti mt pht. Nhng k t khng phi Unicode c chiu di c nh vi chiu di cc i 8.000 k t. Nhng k t khng phi Unicode vi chiu di cc i 8.000 k t. Nhng k t khng phi Unicode vi chiu di cc i 231 (2,147,483,647). Nhng k t Unicode chiu di c nh vi mt chiu di cc i 4.000 k t. Nhng k t Unicode chiu di bin i ,chiu di cc i 4.000 k t. Nhng k t Unicode chiu di thay i, chiu di cc i 230 (1,073,741,823) k t. D liu nh phn chiu di c nh, chiu di cc i 8.000 bytes. D liu nh phn chiu di thay i, chiu di cc i 8.000 bytes. D liu nh phn chiu di thay i, chiu di cc i 231 (2,147,483,647) bytes. S Tham kho ti mt con tr, c gn ti nhng hng. C th lu tr nhng gi tr ca nhiu kiu d liu SQL server ngoi tr text, ntext, timestamp, v Sql_variant. Lu tr mt tp nhng hng S nh phn duy nht c cp nht mi khi bn sa i mt hng. Bn c th ch nh ngha mt ct timestamp trong mt bng.

uniqueidentifier nh danh ton cc duy nht (GUID). Tt, y l thuyt! Chng ta hy xem xt k hn nhng bng khch hng, nhng n t, nhng chi tit n t, v nhng sn phm.

Bng nhng khch hng (Customers)


Bng nhng khch hng cha nhng hng m lu tr nhng chi tit ca mt cng ty t nhng n t vi Cng ty Northwind. Hnh 2.14 cho thy mt s nhng hng v nhng ct c ct gi trong bng nhng khch hng.

Hnh 2.14: nhng hng t bng nhng khch hng Nh bn c th thy, hng u tin c trnh by cho mt khch hng c tn Alfreds Futterkiste; tn ny c ct gi trong ct CompanyName ca bng nhng khch hng. CustomerID cho hng u tin l ALFKI, v nh bn c th thy, CustomerID l duy nht cho mi hng. Nh c cp trc , kha chnh cho bng nhng khch hng l ct CustomerID. Nu bn th thm mt hng mi vi mt kha chnh c dng trong trong mt hng trong bng ny, th c s d liu s loi b hng mi ca bn. Chng hn, nu bn th thm mt hng vo nhng bng khch hng vi mt CompanyID l ALFKI, th hng ny b loi b bi v ALFKI c s dng bi hng u tin trong bng. Mo nh: Bn c th t xem nhng hng t mt bng bi chn bng trong Enterprise Manager, kch chut phi, v chn Open Table Return all rows. Bn s hc nhiu hn v xem nhng hng t nhng bng sau trong mc " xy dng nhng cu truy vn ".

nh ngha ca Bng nhng khch hng


Bng 2.4 cho thy nh ngha cho nhng ct ca Bng nhng khch hng. Bng ny cho thy tn ct, kiu c s d liu, chiu di, v liu ct cho php nhng gi tr null hay khng. Bng 2.4: nh ngha cho nhng ct ca Bng nhng khch hng

Tn ct
CustomerID ContactName ContactTitle Address City Region PostalCode Country Phone Fax

Kiu c s d liu
nchar nvarchar nvarchar nvarchar nvarchar nvarchar nvarchar nvarchar nvarchar nvarchar 5

di
40 30 30 60 15 15 10 15 24 24

Cho php gi tr Null ?


No No Yes Yes Yes Yes Yes Yes Yes Yes Yes

CompanyName nvarchar

Trong mc k tip, bn s hc v bng n t (Orders) .

Bng nhng n t
Bng Orders cha nhng hng ct gi nhng n t c t bi khch hng. Hnh 2.15 cho thy mt s hng v nhng ct c ct gi trong bng Orders.

Hnh 2.15: nhng hng t bng Orders Kha chnh cho bng Orders l ct OrderID, c ngha l gi tr cho ct ny phi l duy nht cho mi hng. Nu bn nhn k su hng u tin trong bng Orders, bn s thy ct CustomerID u l ALFKI, ging nh gi tr ct CustomerID ca hng u tin trong bng nhng khch hng trnh by trc trong Hnh 2.12. By gi bn c th hiu thng tin lin h ca nhng kha ngoi nh th no . Ct CustomerID ca bng Orders l mt kha ngoi n tham chiu ct CustomerID ca bng nhng khch hng. Trong v d ny, bng Orders l bng con, v bng nhng khch hng l bng cha . Bn c th hiu kha ngoi nh mt con tr t bng Orders n bng nhng khch hng. Bng 2.5 cho thy nh ngha cho nhng ct ca bng Orders. Bng 2.5: nh ngha cho nhng ct ca bng Orders

Tn ct
OrderID CustomerID EmployeeID OrderDate RequiredDate ShippedDate ShipVia Freight ShipName ShipAddress ShipCity ShipRegion int

Kiu csdl
4 5 4 8 8 8 4 8 40 60 15 15 nchar int datetime datetime datetime int money nvarchar nvarchar nvarchar nvarchar

Chiu di

Cho php gi tr null ?


No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes

ShipPostalCode ShipCountry

nvarchar nvarchar

10 15

Yes Yes

Bng chi tit n t


Bng nhng chi tit n t cha nhng hng lu gi nhng chi tit ca mi n t. Trong hnh 2.16, ti hn ch nhng hng c truy xut t bng nhng chi tit n t vi nhng hng c ct OrderID bng 10643 (n ging nh ct OrderID ca hng u tin trong bng Orders c trnh by trc trong Hnh 2.15).

Hnh 2.16: nhng hng c hn ch t bng nhng chi tit n t Kha chnh cho bng nhng chi tit n t l t hp ca nhng ct OrderID v CustomerID, c ngha l s t hp ca nhng gi tr trong hai ct ny phi l duy nht cho mi hng. ng thi, ct OrderID ca bng Order Details (nhng chi tit n t) l mt kha ngoi n tham chiu ct OrderID ca bng Ordres. Ct ProductID ca bng Order Details (chi tit n t) l mt kha ngoi n tham chiu n ct ProductID ca bng nhng sn phm. Bng 2.6 cho thy nh ngha cho nhng ct ca Bng nhng chi tit n t . Bn s hc v nhng bng sn phm tip theo. Bng 2.6: nh ngha cho nhng ct ca Bng nhng chi tit n t Tn ct Kiu c s d liu Chiu di Cho php gi tr Null ? OrderID ProductID UnitPrice Quantity Discount int int money smallint real 4 4 8 2 4 Yes Yes Yes Yes Yes

Bng nhng sn phm


Bng nhng sn phm cha nhng hng lu tr nhng chi tit ca mi sn phm c bn bi Cng ty Northwind. trong Hnh 2.17, Ti c hn ch nhng hng c truy xut t bng nhng sn phm vi ct ProductID bng 22, 39, v 46 (chng tng t nh nhng gi tr cho ct ProductID cho nhng hng trong bng Order Details c ch ra trc trong Hnh 2.16).

Hnh 2.17: nhng hng c hn ch t bng nhng sn phm Kha chnh cho bng nhng sn phm l ct ProductID. Ct CategoryID ca bng nhng sn phm l mt kha ngoi ,n tham chiu ti ct CategoryID ca bng Categories . Bng Categories cha nhiu hng lai ca nhng sn phm.

Ct SupplierID ca bng nhng sn phm l mt kha ngai n tham chiu ti ct SupplierID ca bng Suppliers (nh cung ng) Bng Suppliers cha nhng nh cung ng (Suppliers ) nhng sn phm cho Cng ty Northwind. Bng 2.7 cho thy nh ngha cho nhng ct ca Bng nhng sn phm . Bng 2.7: nh ngha cho nhng ct ca Bng nhng sn phm Tn ct Kiu d liu Chiu di Cho php gi tr Null ? ProductID ProductName SupplierID CategoryID UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued int nvarchar int int money smallint smallint smallint bit 4 40 4 4 20 8 2 2 2 1 No No Yes Yes Yes Yes Yes Yes Yes Yes

QuantityPerUnit nvarchar

Trong mc k tip bn s hc xy dng nhng cu truy vn truiy xut nhng hng t nhng bng nh th no.

Xy dng nhng cu truy vn s dng Enterprise Manager


Bn c th xy dng nhng cu truy vn ca mnh kho st nhng hng trong nhng bng s dng Enterprise Manager (Trnh qun tr doanh nghip). Trong mc ny, bn s hc xy dng v chy mt cu truy vn xem nhng n t ca khch hng vi mt CustomerID l ALFKI, Cng vi nhng chi tit n t v nhng sn phm cho n t vi mt OrderID l 10643. c bit, bn s la chn nhng ct sau y: Nhng ct CustomerID v ct CompanyName t bng nhng khch hng Nhng ct OrderID v ct OrderDate t bng Orders Nhng ct ProductID v Quantity (s lng) t bng nhng chi tit n t Bt u xy dng cu truy vn, chn bng nhng khch hng trong Enterprise Manager t nt Tables ca th mc Databases thuc c s d liu Northwind. Kch chut phi v chn Open Table Query. vic ny m query builder (trnh xy dng truy vn), nh trong Hnh 2.18.

Hnh 2.18: Trnh xy dng truy vn Khung bn trn c gi l khung s (Diagram Pane), v n cho thy nhng bng c s dng trong cu truy vn . Nh bn c th thy, bng Customers c thot tin hin ra trong khung Diagram Pane (s ). Khung bn di c gi l Grid Pane (khung li), v n trnh by nhng chi tit cho nhng ct v nhng hng c truy xut t nhng bng. Thot tin, tt c cc hng u s c truy xut t bng nhng khch hng , nh biu th bi du sao (*) trong Grid Pane (khung li). bn di khung li l khung SQL, v n trnh by cu lnh SQL cho cu truy vn. Ghi ch: SQL l mt ngn ng trn nn vn bn truy cp mt c s d liu, v bn s hc mi th v SQL trong chng k tip. By gi, bn c th kch nt SQL trn thanh cng c n khung SQLtr phi bn mun xem cu lnh SQL c xy dng bi query builder (trnh xy dng truy vn). Bn di khung SQL l khung cha nhng kt qu, n trnh by bt k hng no truy xut bi cu truy vn. khung ny thot u trng rng bi v cha c cu truy vn c chy. S dng nhng bc sau y xy dng cu truy vn: 1. Loi b du sao (*) t Grid Pane (khung li) bi kch chut phi trn hp bn tri ca hng cha du sao v chn Delete (Xa). Vic ny dng tt c vic truy xut cc ct t bng nhng khch hng. 2. Kch nt phi chut trong Diagram Pane (khung s ), v chn Add Table. Thm nhng bng Orders v Order Details nh th bn c th truy vn nhng bng ny. Bn cng c th kch nt Add table trn thanh cng c thm nhng bng. Bn ch sau khi thm nhng bng, chng xut hin trong Diagram Pane (khung s ) cng vi nhng ng ni nhng bng cha v con thng qua kha ngoi. Chng hn, nhng bng Customers v bng Orders c ni thng qua ct CustomerID. Tng t, nhng bng Orders v Order Details c ni thng qua ct OrderID. 3. Chn nhng ct CustomerID v CompanyName t bng Customers bi chn nhng hp kim bn tri ca column names (nhng tn ct) trong Diagram Pane (khung s ). 4. Chn nhng ct OrderID v OrderDate t bng Orders. 5. Chn nhng ct ProductID v Quantity (s lng) t bng Order Details (nhng chi tit n t). 6. Trong Grid Pane (khung li), gn tiu chun (Criteria ) cho ct CustomerID l =' ALFKI'. Vic ny gy ra cu truy vn ch truy xut nhng hng t bng nhng khch hng c ct CustomerID l ALFKI. 7. Trong khung Li, gn tiu chun cho OrderID l = 10643. vic ny gy ra cu truy vn ch truy xut nhng hng t bng Orders c ct OrderID bng 10643. 8. Chy cu truy vn bi kch nt Run trn thanh cng c. Hnh 2.19 trnh by kt qu cui cng ca s xy dng v chy cu truy vn.

Hnh 2.19: Xy dng v chy mt cu truy vn Nh bn s thy trong chng k tip, bn cng c th xy dng v chy nhng cu truy vn s dng Visual Studio .NET. Trong mc k tip, bn s hc cch to ra mt bng nh th no s dng Enterprise Manager.

To ra mt Bng
Bn c th s dng Enterprise Manager thm mt bng vo mt c s d liu. Trong mc ny, bn s thm mt bng vo c s d liu Northwind lu nhng chi tit ca mt ngi. Bng ny s c gi l Persons, v s cha nhng ct c trnh by trong Bng 2.8. Bng 2.8: nh ngha cho nhng ct ca Bng Persons COLUMN NAME DATABASE TYPE LENGTH ALLOWS NULL VALUES? PersonID FirstName LastName DateOfBirth Address EmployerID int nvarchar nvarchar datetime nvarchar nchar 4 15 15 8 50 5 No No No Yes Yes No

to ra mt bng trong c s d liu Northwind, bn chn nt Tables ca c s d liu Northwind trong Enterprise Manager v chn Action New Table. Ri bn s thy table designer (trnh thit k bng). Thm nhng ct nh trnh by trong bng 2.8 thuc bng c trnh by trong Hnh 2.20.

Hnh 2.20: thm mt bng mi Ghi nh: chiu di mt s nhng kiu d liu l c nh. Chng hn, kiu int lun lun s dng 4 bytes khng gian lu tr, v vy bn khng th thay i chiu di mt ct int khc 4. Tng t, kiu datetime lun lun s dng 8 bytes khng gian lu tr. Bn c th thay i chiu di ca nhng ct nchar v nvarchar bi v nhng kiu ny c thit k lu tr d liu c chiu di thay i. Kch nt Save trn thanh cng c lu bng. Trong hp thoi Choose Name , Nhp Persons nh mt tn, v kch OK lu bng ca bn, nh trnh by trong Hnh 2.21.

Hnh 2.21: Nhp tn ca bng Ghi nh: Mt khi bn lu bng ca bn, bn c th tr li table designer vo bt c lc no bi chn bng ny trong node "Tables "ca Enterprise Manager, nhp phi bng ny, v chn Design Table. Trong phn cn li ca chng ny, bn s hc cch: Ly thng tin b sung v nhng ct trong mt bng s dng th Columns. Thit t kha chnh ca mt bng. Thit t nhng quyn hn cho php s truy cp ti ni dung ca mt bng. To ra mt mi quan h gia nhng bng. To ra mt ch s cho php truy cp ti thng tin nhanh hn trong mt bng. To ra mt s rng buc hn ch nhng gi tr c th c lu tr trong mt ct.

Th Columns
Trong vng bn di li, bn ch mt th c tn Columns. Th Columns ny cha thng tin b sung v ct ang c chn trong li, v Hnh 2.20, c trnh by trc , trnh by thng tin trn ct PersonID. Khi

bn thay i ct c chn ca bn, thng tin trong th Columns s thay i. Bn c th nhp mt s m t ty chn cho mt ct trong trng Description ca th Columns. Trng Default Value (gi tr mc nh) cho php bn cung cp mt gi tr ban u khi mt hng mi c thm vo bng; tt nhin bn c th cung cp gi tr bn mun cho mt ct v s ghi ln gi tr mc nh. Trng Precision ( chnh xc) trnh by s lng ch s cc i c th c dng lu tr mt con s, bao gm c nhng ch s c ct gi bn phi ca du phy s thp phn. Trng Scale cho thy s lng ch s cc i bn phi ca mt du phy s thp phn. Chng hn, precision v Scale ca mt ct int l 10 v 0, c ngha l ct int ny c th ct gi ti 10 ch s, v khng c ch s no bn phi du phy s thp phn- n khng c ch s no bn phi v mt int l mt s nguyn. Precision v Scale cho mt ct tin t l 19 v 4, c ngha l ct tin t ny c th ct gi ti 19 ch s, trong c 4 ch s bn phi ca du phy phn thp phn. Trng Identity (m nhn dng) cho php bn ch nh liu c phi SQL Server cn phi t ng gn mt gi tr ti mt trng. Nu bn t trng Identity l true, th bn cng c th ch nh nhng gi tr cho nhng trng Identity Seed (m nhn dng khi u) v Identity Increment (m nhn dng tng dn) . Bn s dng trng Identity Seed (m nhn dng khi u) gn gi tr ban u cho ct, v bn s dng trng Identity Increment (m nhn dng tng dn) ch r s tng dn gi tr. Chng hn, nu bn t Identity Seed l 1 v Identity Increment ti 1, th gi tr cho ct u tin l 1, tip theo l 2, vn vn. Ct ProductID ca nhng bng Products l mt v d ca mt ct s dng mt identity t gi tr cho n. Trng IsRowGuid ch r liu c phi mt ct uniqueidentifier l mt nh danh ton cc duy nht c bit n nh mt GUID. Mo nh : SQL Server khng t ng cung cp mt gi tr cho mt GUID. Nu bn mun SQL Server sinh ra mt GUID, Bn c th s dng hm NEWID() ca SQL Server. Hm NEWID() lun lun tr li mt gi tr khc nhau. V bn c th s dng gi tr c gi ra t hm ny nh gi tr mc nh cho ct uniqueidentifier (ct kha chnh) ca bn. Chng hn, bn t trng Default Value (gi tr mc nh) ti [ NEWID()]. Bn s hc nhiu hn v nhng hm SQL Servers trong chng k tip. Trng Formula (Cng thc) cho php bn thit t mt cng thc c dng gn mt gi tr ti mt ct. Trng Collation ch r nhng quy tc c dng sp xp v so snh nhng k t. Bn c l cn thit t trng ny khi lm vic vi nhng ngoi ng. Nhng chi tit hn, tham kho nhng sch ti liu trc tuyn SQL Server.

t kha chnh
Tip theo, bn s t kha chnh cho bng Persons ti PersonID. lm iu ny, kch vo hng u tin trong li ang cha ct PersonID, v kch nt Set primary key trn thanh cng c. Mt khi bn lm iu ny, bn s thy mt biu tng cha kha nh bn tri ca PersonID.

Gn nhng qun hn
t nhng qun hn cho bng ca bn, kch nt Show permissions trn thanh cng c ca table designer. Cp pht qun hn SELECT, INSERT, UPDATE, and DELETE ti vai tr public, nh nh trnh by trong Hnh 2.22. Nhng qun hn ny cho php nhng ngi s dng cng cng (public) truy xut, thm, sa i, v loi b nhng hng t bng Persons.

Hnh 2.22: gn nhng qun hn Kch OK tip tc.

To mi quan h
Bn s to ra mt mi quan h gia bng Persons ca bn v bng Customers. xem mn hnh nhng mi quan h, kch nt Manage Relationships (Qun l nhng mi quan h) trn thanh cng c ca table designer (b thit k bng). Kch New bt u to mi quan h. Chn bng Customers nh bng kha chnh v chn ct CustomerID t bng ny. m bo rng Persons c chn nh bng kha ngoi, v chn ct EmployerID t bng ny. Hnh 2.23 cho thy iu ny. Bn ch l tn mi quan h c t ng gn ti FK_Persons_Customers.

Hnh 2.23: To mi quan h Nhng hp kim ti y Trang nh sau: Check existing data on creation (Kim tra d liu hin hu trn s to thnh): iu ny p dng s rng buc ca bn ti d liu m c l tn ti trong c s d liu khi bn thm mi quan h ca bn vo bng

kha ngoi . Enforce relationship for replication (thi hnh mi quan h cho bn sao): Bn sao cho php bn sao chp thng tin ti mt c s d liu khc. Khi bn cho php thc thi mi quan h cho bn sao, s rng buc ca bn c ng dng vo bng kha ngoi khi bng ny c sao chp ti mt c s d liu khc nhau trong thi gian sao chp. Enforce relationship for INSERTs and UPDATEs (kt buc mi quan h cho nhng s chn v nhng s cp nht): iu ny p dng s rng buc ca bn ti nhnghng c thm vo, c sa i, hay c loi b t bng kha ngoi . Cascade Update Related Fields (Cp nht dy chuyn nhng trng quan h): iu ny gy cho SQL Server t ng cp nht nhng gi tr kha ngoi ca mi quan h ca bn khi gi tr kha chnh c sa i. Cascade Delete Related Fields ( Xa dy chuyn nhng trng quan h ) iu ny gy cho SQL Server t ng loi b nhng hng t bng kha ngoi bt c khi no hng c tham chiu trong bng kha chnh b loi b. Kch Close tip tc.

To ra mt ch s
Mt ch s cho php c s d liu nhanh chng nh v mt hng khi bn yu cu ly li hng ny da vo mt gi tr ct c bit. Trong mc ny, bn s to ra mt ch s trn ct LastName ca bng Persons ca bn. xem nhng ch s cho bng Persons ca bn, kch nt Manage Indexes/Keys (Qun l nhng ch s/ nhng kha) trn thanh cng c ca (b thit k bng). Kch new bt u to ra mt ch s mi. t tn ca ch s l IX_LastName_Persons, chn ct LastName v gn order l ascending (tng dn). Hnh 2.24 cho thy iu ny.

Hnh 2.24: to ra mt ch s Bn s khng thay i bt k nhng trng v hp kim no khc khi to ra ch s ca bn, hy chng y nh nhng g chng c, di y l ngha ca nhng trng: Index Filegroup: Ch s nhm tp tin l filegroup m trong bn mun ct gi ch s ca bn. Mt filegroup c to ra t mt hoc nhiu file vt l trn a cng ca my tnh. SQL Server s dng filegroups ct gi

thng tin thc t to thnh mt c s d liu. Create UNIQUE : Ty chn Create UNIQUE (to m duy nht) cho php bn to ra mt rng buc duy nht hay ch s cho bng c s d liu c la chn. Bn ch nh bn ang to ra mt s rng buc duy nht hay ch s bi chn nt rai Constraint hoc Index . Ignore duplicate key (b qua kha trng lp): nu bn to ra mt ch s duy nht, bn c th chn ty chn ny l i nhng gi tr kha trng lp. Fill factor (H s lp y): Tr phi bn l mt ngi s dng SQL Server cao cp, nu khng bn cn phi h s lp y trong s thit t mc nh. n v nh nht ca b lu tr trong mt c s d liu SQL Server l mt trang nh, n c th lu tr ti 8,096. bytes d liu. D liu cho nhng bng v nhng ch s c ct gi trong nhng trang nh. Bn c th ch nh dung lng mi trang ch s bi thit t fill factor (h s lp y) . Chng hn, nu bn gn h s lp y ti 60 phn trm, th trang s cha ti 60 phn trm d liu v 40 phn trm khng gian trng . S lng ca khng gian trng trn mt trang ch s l quan trng v khi mt trang ch s c lp y, SQL Server phi tch trang ra tng phn lm ni lu tr cho d liu ch s mi. Bng cch gim bt h s lp y, nh , bn c th tng s thc thi ca c s d liu ca bn bi v SQL Server s khng phi chia nhng trang ra thng xuyn. Tuy nhin, vic gim bt h s lp y, cng gy cho ch s nm gi khng gian a cng hn bi v s c nhiu khng gian trng hn trong mi trang. Nu bn khng ch nh mt h s lp y, th h s lp y mc nh ca c s d liu c s dng. Pad Index (Ch s m): tr phi bn l mt ngi s dng SQL Server cao cp, nu khng bn khng nn cho php ty chn ch s m (Pad Index) . Nu bn ch nh mt h s lp y (fill factor) nhiu hn 0 phn trm v bn ang to ra mt ch s duy nht (unique index) thng qua ty chn (Create UNIQUE) , th bn c th cho php ty chn Pad index (Ch s m). iu ny thng bo My ch phc v SQL n s s dng s phn trm nh bn ch r trong trng fill factor (h s lp y) lm khang trng b ng trn mi nhnh node ca cy nh phn to ra ch s. Bn c th hc nhiu hn ty chn ny trong nhng sch ti liu trc tuyn SQL Server . Create as CLUSTERED : ( to nhm) Bn s dng ty chn Create as CLUSTERED ch nh ch s ca bn c to nhm. Mt ch s c to nhm l mt ch s cha nhng hng ca bng thc t, thay v nhng con tr ti nhng hng ca bng . Nhng ch s c to nhm cho php truy xut nhanh chng hn nhng hng, nhng yu cu nhiu thi gian hn khi chn nhng hng mi. Bn c th hc nhiu hn ty chn ny trong nhng sch ti liu trc tuyn SQL Server. Do not automatically recompute statistics (Khng t ng tnh tan li thng k): Bn in hnh khng nn s dng ty chn ny v n c th lm gim yu s thc thi. Khi bn to ra mt ch s, SQL Server t ng lu tr thng tin thng k v s phn phi ca nhng gi tr trong nhng ct c ch s ha ca bn. SQL Server s dng thng k ny nh gi chi ph ca vic s dng ch s cho mt cu truy vn. Bn s dng ty chn "Do not automatically recompute statistics" ch nh SQL Server cn phi s dng thng k to ra trc , c ngha l thng k khng nht thit c cp v cho php gim thiu s thc thi. Bn c th hc nhiu hn ty chn ny trong nhng sch ti liu trc tuyn SQL Server. Kch Close tip tc.

To ra mt s rng buc
Mt s rng buc cho php bn nh ngha mt gii hn trn gi tr c th c ct gi trong mt ct. Trong mc ny, bn s to ra mt s rng buc trn ct DateOfBirth ca bng Persons ca bn. S rng buc ny s bo m rng bn c th t ch nhng ngy thng gia thng ging 1, 1950, v thng mi hai 31, 2050, trong ct DateOfBirth. xem nhng s rng buc cho bng Persons ca bn, kch nt Manage Constraints (Qun l nhng rng buc) trn thanh cng c ca table designer. Kch New bt u to ra mt s rng buc mi. t biu thc rng buc nh sau: ([DateOfBirth] >= '1/1/1950' and [DateOfBirth] <= '12/31/2050')

Gn tn rng buc l CK_DateOfBirth_Persons. Hnh 2.25 cho thy iu ny.

Hnh 2.25: to ra mt s rng buc Bn s khng thay i bt k hp kim tra no khi to ra s rng buc ca cc bn, hy nguyn nh nhng g chng c, di y l ngha nhng trng : Check existing data on creation (Kim tra d liu hin hu trn s to thnh): S dng ty chn ny bo m rng d liu ang tn ti trong bng tha mn s rng buc ca bn. Enforce constraint for replication (kt buc s rng buc cho bn sao): s dng ty chn ny kt buc s rng buc ca bn khi bng ca bn c sao chp ti c s d liu khc thng qua bn sao. Enforce constraint for INSERTs and UPDATEs (kt buc s rng buc cho nhng s chn v cp nht) S dng ty chn ny kt buc s rng buc ca bn khi nhng hng c thm vo hay c sa i trong bng. Kch Close tip tc. lu bng v ng table designer.

Tm lc
Trong chng ny, bn hc nn tng ca nhng c s d liu v SQL Server. Mt c s d liu l mt tp hp c t chc ca thng tin. Mt c s d liu quan h l mt tp hp ca thng tin lin quan m c t chc vo trong nhng cu trc c bit n nh nhng bng. Mi bng cha ng nhng hng v thm na c t chc vo trong nhng ct. H thng c dng qun l thng tin trong c s d liu c bit nh h qun tr c s d liu (database management system). Trong trng hp ca mt c s d liu in t trong mt my tnh, h qun tr c s d liu l phn mm qun l thng tin trong nhng b nh v nhng tp tin ca my tnh. Mt v d v phn mm ny l SQL Server. Bn thy cch khi chy mt c s d liu SQL Server nh th no, v lm sao s dng Enterprise Manager khm ph c s d liu Northwind.

in hnh, mi bng trong mt c s d liu c mt hoc nhiu ct m xc nh mi hng duy nht trong bng. Ct ny c bit nh kha chnh cho bng. Nhng bng c th lin quan ln nhau thng qua nhng kha ngoi. Bn hc cch truy vn nhng hng trong mt bng nh th no v cch to ra mt bng mi s dng Enterprise Manager. Trong chng k tip, bn s hc s dng ngn ng truy vn c cu trc nh th no.

Chng 3: Gii thiu v ngn ng truy vn c cu trc (SQL)


Tng quan
Trong chng ny, bn s hc cch s dng ngn ng truy vn c cu trc (SQL) truy nhp mt c s d liu , s dng hai cng c nhp v chy nhng cu truy vn : Query Analyzer (b phn tch truy vn) v Visual Studio .NET. Chng ny ch cho bn cch s dng c s d liu Northwind SQL Serever, cha thng tin v mt cng ty tng tng Northwind . Bn s thy cch s dng SQL tng tc vi c s d liu Northwind nh th no truy xut v thao tc thng tin v to ra, sa i, xa nhng bng trong c s d liu ny. c trng trong chng ny: S dng SQL Vic truy nhp mt c s d liu s dng Visual Studio .NET

S DNG SQL :
SQL ( s xuy lun r rng) l mt ngn ng tiu chun v truy cp nhng c s d liu quan h. Nh bn thy trong chng ny, SQL rt d hc v d s dng. vi SQL , bn c th cho c s d liu bit d liu m bn cn truy cp, v phn mm qunl c s d liu s tnh tan chnh xc lm th no ly d liu . C rt nhiu kiu pht biu SQL, nhng nhng kiu thng dng nht ca pht biu SQL nh di y: Nhng pht biu ca Ngn ng thao tc d liu ( Data Manipulation Language_DML): Nhng pht biu ca Ngn ng nh ngha d liu (Data Definition Language (DDL)) Nhng pht biu DML hco php bn truy xut, thm, sa i, xa nhng dng cha trong c s d liu. Nhng pht biu DDL cho php bn to nhng cu trc c s d liu nh bng v v. Trc khi bn hc nhng iu c bn v nhng pht biu DML, bn cn bit cch nhp v chy nhng pht biu SQL. S dng nhng cng c phn tch truy vn (Query Analyzer tool). Ch : nh bn s thy trong mc Truy cp mt c s d liu s dng Visual Studio .NET nh74ng chng sau, bn cng c th s dng Visual Studio .NET to nhng pht biu SQL. Visual Studio .NET cn cho php bn nhng pht biu SQL mt cch trc quan, hay nhp vo bng tay.

S DNG B PHN TCH TRUY VN (Query Analyzer):


Bn s dng Query Analyzer nhp v chy nhng pht biu SQL : chn start Microsoft SQL Server Query Analyzer. Trong nhng mc di y , bn s hc cch kt ni vi mt instance SQLserver, nhp vo v chy mt pht biu SQL, lu mt pht biu SQL, v ti ln mt SQL Statement.

KT NI VI MT INSTANCE SQL SEVER:

Khi bn khi ng Query Analyzer , mt hp thai Connect to SQL Server s hin th u tin, trong hp comboBox vi nhn SQL Server , bn nhp vo tn ca SQL Server mun kt ni. bn c th click vo mi tn kin th danh sch s xung v chon tn ca i tng mun kt ni, hoc nt ba chm hin th danh sch SQL server ang chy trn mng.

Hnh 3.1: Kt ni ti mt c s d liu my ch phc v SQL Nu bn chn nt radio _Windows authentication, th SQL Server s s dng nhng thng tin ngi dng trong Windows 2000/NT hiu lc ha yu cu kt ni vi SQL Server ca bn. nu bn chn nt riodio_ SQL Server authentication , bn s phi nhp m ti khan v password. Trong hnh trn ,bn nhp localhost vo trng SQL Server, tng ng vi th hin SQL Server c ci t trn my cc b. ti cng chn nt radio_SQL Server authentication , v nhp sa vo trng Login Name, v sa vo trng Password (y l Password m ti s dng khi ci t SQL Server). Nhng chi tit ny ri li c s dng kt ni vi SQL Server. Nu bn c mt instance ca SQL Server chy trn my cc b hopc trn mng , bn c th nhp vo nhng chi tit lin quan v click OK kt ni vi SQL Server. By gi bn hiu cch kt ni vi c s d liu, hy tip tc xem xt lm th no nhp v chy mt pht biu SQL.

NHP V CHY MT PHT BIU SQL:


Mt khi bn kt ni c vi SQL Server s dng trnh phn tch Query (Query Analyzer),bn c th s dng Object Browser xem nhng thnh phn ca c s d liu, v bn nhp vo v chy pht biu SQL s dng mt ca s Query (Query window) .hnh 3.2 trnh by ca s Object Browser v mt th d Query windows , cng vi nhng kt qu t vic truy xut cc ct CustomerID v Companyname t bng Customers.

Hnh 3.2 : xem nhng mc c s d liu s dng Object Brower v thc thi pht biu SELECT s dng Query Windows Nh bn thy hnh 3.2 , bn nhp vo nhng pht biu SQL vo phn trn ca ca s query, v kt qu truy xut t c s d liu hin th trong phn di ca ca s query. Bn ch nh c s d liu truy xut vi pht biu USE , v bn truy xut nhng hng t c s d liu s dng pht biu SELECT. Mo nh: bn cng c th ch nh mt c s d liu ng nhp s dng danh sch s xung trn Toolbar. Nu bn mun i theo cng vi th d ny, bt u nhp pht biu USE sau y vo trong ca s Query ca bn: USE Northwind Pht biu USE ny ch nh rng bn mun s dng c s d liu Northwind. Tip theo trn hng khc, nhp vo pht biu SELECT bh di y: SELECT CustomerID, CompanyName FROM Customers; Pht biu SELECT ny cho bit bn mun truy xut cc ct CustomerID v Companyname t bng Customers. Ch : SELECT v FROM l nhng t kha SQL. Mc d SQL khng phi l case sensitive,ti s dng ch hoa khi ch nh nhng t kha SQLv kiu lc khi ch nh nhng ct v tn bng. bn c th s dng du chm phy(;) kt thc mt pht biu SQL, Bn c th chy mt pht biu SQL nhp trong ca s Query theo nm cch: chn Execute t query menue click nt Execute Query trn toolbar nhn F5 trn bn phm nhn Ctrl+E trn bn phm nhn Alt+X trn bn phm Mt khi bn chy pht biu SQL, pht biu ca bn c gi n c s d liu th thi. C s d liu s chy pht biu ca bn v gi kt qu v . v kt qu ny hin th phn di ca ca s query windows

LU V TI MT PHT BIU SQL:


Bn c th lu mt pht biu SQL nhp vo Query Analyzer thnh mt file Text . sau 1o bn cc th ti ln v chy pht biu SQL lu thnh file Text . Bn c th lu pht biu SQL bng cch: chn Save hoc Save As t File menu click nt Save Query/Result trn toolbar nhn Ctrl+S trn bn phm Khi bn th hin mt cch no trn y, trnh Query Analyzer m ra mt hp thai Open Query File. Chng ta hy ni bn m CustomerSelect.sql.mt khi bn m mt File Query, bn c th s dng mt trong nhng k thut c m t trc y chy n.

TM HIU NHNG PHT BIU CA NGN NG S L D LIU (DML):


Nh c cp trc, nhng pht biu DML cho php bn truy xut, thm, sa i, v xa nhng hng c lu tr trong cc bng ca c s d liu. c bn kiu pht biu DML: SELECT truy xut nhng hng t mt hay nhiu bng. INSERT thm mt hay nhiu hng mi vo mt bng. UPDATE sa i mt hac nhiu hng trong mt bng.

DELETE xa mt hoc nhi6u hng khi mt bng. Bn s hc cch s dng bn pht biu ny trong nhng phn tip sau.

TRUY XUT NHNG HNG T MT BNG N:


Bn s dng pht biu SELECT truy xut nhng hng t nhng bng. pht biu SELECT c rt nhiu khun Mu, v phin bn n gin nht cho php bn ch nh mt danh sch nhng tn ct v bng. th d , pht biu SELECT di y truy xut nhng ct CustomerID, CompanyName, ContactName, and Address t bng Customers: SELECT CustomerID, CompernyName, ContactName, Address FROM Customers; Nhng ct cn truy cp c ghi sau t kha SELECT , v bng ch nh c ghisau t kha FROM. Nu bn mun truy xut tt c cc ct t bng, bn ch nh k t (*) ngay sau t kha SELECT. Mo nh: trnh truy xut nhng thng tin khng cn thit , thay v s dng (*) ,ch nn lit k nhng ct m bn thc s cn. Th d: pht biu SELECT di y s truy xut tt c cc ct t bng Customers s dng k t (*). SELECT * FROM Customers; Hnh 3.3 trnh by nhng kt qu ca pht biu SELECT.

truy xut nhng hng t mt bng c cha khang cch trongtn ca n, bn t tn ca bng ny trong mt cp ngoc vung. Th d , pht biu SELECT di y truy xut nhng hng t bng Order Details: SELECT * FROM [Order Details]; Ch thch: bn cng c th s dng cp ngoc vung vi tn ct c khang trng.

HN CH NHNG HNG TRUY XUT:


Bn s dng mnh WHERE hn ch nhng hng c truy xut bi pht biu SELECT. Th d: pht biu SELECT di y s dng mnh WHERE hn ch nhng hng c truy xut t bng Customer Vi nhng hng no c ct Column l UK: SELECT CustomerID, CompanyName, City

FROM Customers WHERE Country = UK; Hnh 3.4 : trnh by nhng kt qu ca biu thc SELECT

Pht biu SELECT tip theo s dng mnh WHERE hn ch nhng hng truy xut t bng Product quy cho dng c ProductID = 10: SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID = 10; Tan t bng khng phi l tan t duy nht m bn c th s dng trong mnh where . Bng 3.1 trnh by nhng tan t tan hc m bn c th s dng.

Pht biu SELECT sau y trnh by ton t nh hn hoc bng (<=) truy xut nhng hng t bng Products M gi tr ct ProductID nh hn hay bng 10: SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID <= 10; pht biu SELECT tip theo s dng tan t khng bng (<>) truy cp nhng hng t bng Product c gi tr ct ProductID khng bng mi : SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID <> 10;

THC THI S THCH NG VI MU:


Bn s dng ton t LIKE trong mnh WHERE thc hin s thch ng vi mu. bn ch mt hay nhiu K t i din s dng trong chui thc hin s thch ng mu ca bn. Bng 3.2: nhng k t i din

Table 3.2: NHNG K T I DIN K T _ % [] [^ ] [-] # M T i din cho bt c mt k t no. Th d, J_y ph hp vi Joy v Jay. Ph hp vi mi s lng k t. th d, %wind ph hp vi Northwind v Southwind; %fire% ph hp vi starfire, firestarter,v fireman. Ph hp vi bt c k t no trong ngoc vung. Th d, [sm]ay ph hp vi say v may. Ph hp vi bt c k t no khng nm trong ngoc vung. Th d, [^a] ph hp vi bt c k t no ngai a. Ph hp vi mt dy nhng k t. th d, [a-c]bc ph hp vi abc, bbc,v cbc. Ph hp vi bt c mt s no. Th d, A# ph hp vi A1 n A9.

Hy xem mt vi th d s dng mt vi k t i din trnh by trong bng 3.2 . Pht biu SELECT sau y s dng tan t LIKE truy xut t bng Products nhng dng c ct ProductName ging nh Cha_ SELECT ProductID, ProductName FROM Products WHERE ProductName LIKE 'Cha_'; Bng 3.5 trnh by nhng kt qu ca pht biu SELECT . LIKE Cha_ ph hp vi tn nhng sn phm khi u bng t Cha v kt thc vi bt c k t no.

Pht biu SELECT tip theo s dng tan t LIKE truy xut nhng sn phm c ct ProductsName ging Cha%: SELECT ProductID, ProductName FROM Products WHERE ProductName LIKE 'Cha%';

Hnh 3.6 trnh by nhng kt qu ca pht biu SELECT . LIKE Cha% ph hp vi nhng sn phm c tn bt u vi Cha v kt thc vi s lng k t bt k.

Pht biu SELECT tip theo s dng tan t LIKE truy xut sn phm c ct ProductsName ging [ABC]% : SELECT ProductID, ProductName FROM Products WHERE ProductName LIKE '[ABC]%'; Hnh 3.7 trnh by mhng kt qu ca pht biu SELECT . LIKE [ABC]% ph hp vi nhng sn phm vi tn bt u vi mt trong cc k t trong ngoc vung : A,B hoc C v kt thc vi s lng bt k k t

Pht biu SELECT tip theo s dng ton t LIKE truy xut nhng sn phm c ct ProductName ging [^ABC]% : SELECT ProductID, ProductName FROM Products WHERE ProductName LIKE '[^ABC]%'; Hnh 3.8 trnh by nhng kt qu ca pht biu SELECT .LIKE [^ABC]% ph hp vi nhng sn phm c tn khng bt u bng bt c k t no trong ngoc vung :A, B hoc C v kt thc vi s lng bt k k t

Pht biu SELECT tip theo s dng tan t LIKE truy xut nhng sn phm c ct ProductName ging '[A-E]%':
SELECT ProductID, ProductName FROM Products WHERE ProductName LIKE '[A-E]%';

Figure 3.9 trnh by kt qu ca pht biu SELECT ny. LIKE '[A-E]%' ph hp vi nhng sn phm c tn bt u bng mt k t bt k no trong di k t t A n E, v kt thc vi bt k k t s.

Hnh 3.9: nhng sn phm c ProductName ging '[A-E]%'

CH NH MT DANH SCH GII HN NHNG GI TR:

Bn s dng tan t IN trong mt mnh WHERE truy xut nhng hng c nhng ct cha nhng gi tr c trong mt danh sch ch dnh. Th d, pht biu SELECT sau s dng tan t IN truy xut nhng sn phm c ProductID l 1,2,5,20,45 hay 50:
SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID IN (1, 2, 5, 15, 20, 45, 50);

S DNG SUBQUERY LY MT DANH SCH GI TR GII HN:


y l v d khc trnh by ct OrderID t bng Orders ca nhng hng c ct CustomerID c cng gi tr c trong danh sch truy xut c t mt truy vn ph;truy vn ph ny truy xut ct CustomerID t bng Customers ni CompanyName ging 'Fu%':
SELECT OrderID FROM Orders WHERE CustomerID IN ( SELECT CustomerID FROM Customers WHERE CompanyName LIKE 'Fu%' );

The results of the subquery are used in the outer query.

CH NH MT DY GI TR GII HN:
Bn s dng ton t BETWEEN trong mt mnh WHERE truy xut nhng hng vi nhng ct cha nhng gi tr trong mt phm vi c ch nh. Chng hn, pht biu SELECT sau s dng tan t BETWEEN truy xut nhng sn phm vi ProductID gia 1 v 12:
SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID BETWEEN 1 AND 12;

y l mt v d khc hin th ct OrderID cho nhng hng t bng Orders c OrderDate trong khong '199607-04' v '1996-07-08':
SELECT OrderID FROM Orders WHERE OrderDate BETWEEN '1996-07-04' AND '1996-07-08';

O NGC NGHA CA MT TAN T:


Bn s dng t kha NOT trc mt ton t trong mt mnh WHERE o ngc ngha ca ton t ny. Chng hn, pht biu SELECT sau s dng t kha NOT o ngc ngha ca ton t BETWEEN:
SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID NOT BETWEEN 1 AND 12;

Ch thch: bn c th s dng t kha NOT o ngc ngha ca nhng tan t khc, th d , NOT LIKE, NOT IN.

TRUY XUT NHNG HNG VI CT C GI TR NULL:


Trc , Ti cp n nhng ct ny c th cha nhng gi tr NULL. Mt gi tr NULL khc vi t chui trng hay s khng: Mt gi tr NULL i din cho mt gi tr m cha c thit lp, hay cha c bit. Bn c th s dng ton t IS NULL trong mt mnh WHERE xc nh mt ct c cha mt gi tr NULL hay khng. Chng hn, pht biu SELECT s dng ton t IS NULL truy xut nhng khch hng c ct Fax cha mt gi tr NULL:

SELECT CustomerID, CompanyName, Fax FROM Customers WHERE Fax IS NULL;

Hnh 3.10 cho thy nhng kt qu ca pht biu SELECT ny .

Figure 3.10: S dng ton t IS NULL truy xut nhng khch hng c ct Fax cha mt gi tr NULL Nh bn c th thy, nhng gi tr NULL c trnh by l NULL trong Query Analyzer.

CH NH NHNG IU KIN:
Bn c th s dng nhng ton t lgic c trnh by trong Bng 3.3 ch r nhng iu kin trong mt mnh WHERE. Bng 3.3: nhng ton t lgic Ton t M t a AND b t gi tr ti true khi c hai a v b u ng a OR b NOT a t gi tr ti true khi mt trong hai a hoc b l true Gn gi tr ti true nu a l false, v false nu a l true

Chng hn, pht biu SELECT sau s dng ton t AND truy xut nhng sn phm c ct UnitsInStock nh hn 10 v ct ReorderLevel ct nh hn hay bng 20
SELECT ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products WHERE UnitsInStock < 10 AND ReorderLevel <= 20;

Hnh 3.11 cho thy nhng kt qu ca pht biu SELECT.

Hnh 3.11: S dng ton t AND truy xut nhng sn phm c UnitsInStock nh hn 10 v ReorderLevel nh hn hay bng 20 Trong v d k tip,Pht biu SELECT s dng ton t OR truy xut nhng sn phm c ct UnitsInStock nh hn 10 hoc ct ReorderLevel nh hn hay bng 20
SELECT ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products WHERE UnitsInStock < 10 OR ReorderLevel <= 20;

Hnh 3.12 cho thy nhng kt qu ca pht biu SELECT ny.

Hnh 3.12: S dng ton t OR truy xut nhng sn phm c UnitsInStock nh hn 10 hoc ReorderLevel nh hn hay bng 20 Pht biu SELECT tip theo s dng ton t NOT truy xut nhng sn phm c ct UnitsInStock khng nh hn 10
SELECT ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products WHERE NOT (UnitsInStock < 10);

SP XP NHNG HNG:

Bn c th s dng mnh ORDER BY phn loi sp xp nhng hng truy xut c t c s d liu. Bn ch nh ct (hay nhng ct) phn loi sp xp trong mnh ORDER BY. Theo mc nh, nhng hng c phn loi trong th t tng dn. Chng hn, pht biu SELECT sau y sp xp nhng hng s dng ct ProductName :
SELECT ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products ORDER BY ProductName;

Hnh 3.13 cho thy nhng kt qu ca pht biu SELECT ny. Nh bn c th thy, nhng hng c sp xp theo th t tng dn s dng ct ProductName .

Hnh 3.13: S dng mnh ORDER BY sp xp nhng sn phm theo gi tr tng dn ca ProductName Bn c th pht biu r rng s phn loi sp xp cho mt ct s dng t kha ASC hay DESC. ASC sp xp nhng ct theo th t tng dn (tit mc nh nht u tin), v DESC sp xp nhng ct theo th t gim dn (tit mc ln nht u tin). Chng hn, pht biu SELECT sau y sp xp nhng sn phm theo th t gim dn s dng ct ProductName :
SELECT ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products ORDER BY ProductName DESC;

Bn c th ch nh nhiu ct trong mt mnh ORDER BY. Chng hn, pht biu SELECT sau y sp xp nhng hng s dng c hai ct UnitsInStock v ReorderLevel :
SELECT ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products ORDER BY UnitsInStock DESC, ReorderLevel ASC;

Hnh 3.14 cho thy nhng kt qu ca pht biu SELECT ny. Nh bn c th nhn thy, nhng hng c sp xp ct UnitsInStock trc tin (theo th t gim dn), v sau l ct ReorderLevel (theo th t tng dn).

Hnh 3.14: S dng nhng t kha DESC v ASC sp xp nhng sn phm vi s gim dn UnitsInStock v tng ln ReorderLevel

TRUY XUT N DNG U TIN:


Bn s dng t kha TOP ch truy xut N hng u tin t mt pht biu SELECT. Chng hn, pht biu SELECT sau s dng t kha TOP truy xut 10 hng u tin t bng nhng sn phm, c sp xp bi ct ProductID:
SELECT TOP 10 ProductID, ProductName, UnitsInStock, ReorderLevel FROM Products ORDER BY ProductID;

Hnh 3.15 cho thy nhng kt qu ca pht biu SELECT ny.

Hnh 3.15: S dng t kha TOP truy xut 10 sn phm u tin bi ProductID

LAI TR NHNG HNG TRNG LP:


Bn s dng t kha DISTINCT loi tr nhng hng trng lp c truy xut bi mt pht biu SELECT. Chng hn, pht biu sau y s dng t kha DISTINCT truy xut nhng gi tr ct Country phn bit t bng nhng khch hng :
SELECT DISTINCT Country FROM Customers;

Hnh 3.16 cho thy nhng kt qu ca pht biu SELECT ny.

Figure 3.16: Using the DISTINCT keyword to retrieve distinct Country column values Nh bn c th thy, Pht biu SELECT ch trnh by nhng gi tr ct Country c ngha ring bit v duy nht: nhng gi tr trng lp khc c loi tr. Nu bn khng bao gm t kha DISTINCT, th tt c nhng gi tr ct Country s c hin th bao gm c nhng gi tr trng lp.

S KT HP NHNG HNG C TRUY XUT T PHT BIU SELECT:


Bn s dng tan t UNION kt hp nhng hng tuy xut c t pht biu SELECT vo trong mt b nhng dng. Th d : pht biu SELECT di y s dng tan t UNION kt hp nhng hng truy xut c t pht biu SELECT S dng tan t UNION kt hp nhng hng truy xut c t bng Products ; nhng hng truy xut ln th nht c ProducID nh hn hay bng 5, v nhng ct truy xut ln hai c ProductName khi u vi Queso: (SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductID <= 5) UNION (SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice FROM Products WHERE ProductName LIKE 'Queso%');

CHIA NHNG HNG TRUY XUT C VO TRONG NHNG KHI:


Bn s dng mnh GROUP BY chia nhng hng truy xut c vo trong nhng khi. bn c th xem mt block nh l mt nhm nhng hng c c ng vo trong mt hng . th d , bn nhm ct m nh cung ng (SupplierID) ca nhng hng trong bng sn phm(Products). Bn s c mt hng cho mi hng c ct SupplierID cng gi tr. SELECT SupplierID FROM Products GROUP BY SupplierID; Pht biu SELECT ny hin th mt hng cho mi nhm nhng hng c cng gi tr SupplierID. Bn c th ly c s lng hng trong mi block nh s dng hm COUNT(). COUNT() l mt trong nhng hm i cng vi SQL Server, v c bit nh mt hm tng th bi v n c th thao tc trn nhiu dng trong cng mt lc. Bn c th s dng COUNT() ly thng tin v s lng hng , nh trnh by trong th d di y: SELECT SupplierID, COUNT(*) FROM Products GROUP BY SupplierID; Hnh 3.18 trnh by kt qu ca pht biu SELECT ny

HN CH NHNG NHM CA NHNG HNG C TRUY XUT:


Bn s dng mnh HAVING hn ch nhng nhm ca nhng hng truy xut c bi mnh GROUP BY. Th d : Pht biu SELECT sau y s dng mnh HAVING hn ch nhm nhng hng tr v c hn bn hng trong mt nhm: SELECT SupplierID, COUNT(*) FROM Products GROUP BY SupplierID HAVING COUNT(*) > 4; Hnh 3.19 trnh by kt qu ca pht biu SELECT ny

CH NH HIN TH TN MT CT V NH BIT DANH CHO MT BNG:

Bn c th s dng mnh AS nh tn cho mt ct khi n c hin th trong bng tr v t pht biu SELECT. Bn c th mun thc hin iu ny khi cn hin th nhng tn thn thin hay m t tn nhng ct. th d , pht biu SELECT sau y s dng mnh AS nh tn hin th ca ct ProductName thnh Product, and ct UnitPrice thnh Price cho mi n v: SELECT ProductName AS Product, UnitPrice AS 'Price for each unit' FROM products; Hnh 3.20 trnh by nhng kt qu ca pht biu ny

Bn cng c th s dng mnh AS t tn i din cho bng. bn c th mun thc hin iu ny nu nh tn bng ca bn di. Th d sau y s dng mnh AS t tn i din cho bng Customers v Orders tng ng vi Cust v Ord SELECT Cust.CustomerID, CompanyName, Address, OrderID, ShipAddress FROM Customers AS Cust, Orders AS Ord WHERE Cust.CustomerID = Ord.CustomerID AND Cust.CustomerID = 'ALFKI';

THC HIN NHNG TNH TAN DA VO NHNG CT CHA GI TR:


Bn in hnh s dng nhng ct c tnh tan thc hin nhng tnh ton da trn nhng gi tr ca ct . th d , b c th mun s dng mt trng c tnh tan tnh tan kt qu ca vic tng gi tr ca ct UnitPrice trong bng Products ln 20%. Th d: SELECT UnitPrice * 1.20 FROM Products WHERE ProductID = 1; Kt qu tr v l 21.600000 ( 18000000*1.2) Th d tip theo lin kt gi tr ct ContactName v ContactTitle t bng Customers ni dng no c CustomerID bng ALFKI: SELECT ContactName + ', ' + ContactTitle FROM Customers WHERE CustomerID = 'ALFKI';

Kt qu tr v Maria Anders, Sales Representive

TRUY XUT NHNG HNG T NHIU BNG:


Cho n lc ny bn c nhn thy nhng pht biu SELECT truy xut nhng hng t ch mt bng cho mt ln thc thi. Bn s lun lun cn truy xut nhng hng t nhiu bng s dng cng mtpht biu SELECT. Th d: bn c th mun thy tt c nhng n t ca mt khch hng. thc kin iu ny ,bn phi ch nh c hai bng Customers v Orders sau t kha FROM trong pht biu SELECT v s dng a table join trong mnh WHERE. Bn cng phi ch nh tn ca bng khi tham chiu n nhng ct cng tn trong c hai bng. pht biu SELCET Sau y trinh by v truy xut nhng n t ca khch hng vi CustomerID l ALFKI: SELECT Customers.CustomerID, CompanyName, Address, OrderID, ShipAddress FROM Customers, Orders WHERE Customers.CustomerID = Orders.CustomerID AND Customers.CustomerID = 'ALFKI'; Ch rng bng Customers v Orders c ch nh sau t kha FROM, bi v c hai bng u cha ct c tn l CustomerID, tn bng c t trc mi tham chiu n ct tng ng trong mi bng. s ni bng c th hin trn ct CustomerID cho mi bng (Customers.CustomerID = Orders.SustomerID ). Hnh 3.21 trnh by nhng kt qu ca pht biu SELECT ny.

Pht biu SELECT trc s dng nh dng tiu chun SQL cho vic lin kt nhng bng. vi SQL Server, bn cng c th s dng t kha JOIN cho vic lin k nhng bng. li th ca t kha JOIN l bn c th s dng n thc hin nhng kt ni ngai. Bn s hc n ngay sau y. y l mt th d n vit li nhng pht biu SELECT trc s dng t kha JOIN : SELECT Customers.CustomerID, CompanyName, Address, OrderID, ShipAddress FROM Customers JOIN Orders ON Customers.CustomerID = Orders.CustomerID AND Customers.CustomerID = 'ALFKI'; Pht biu SELECT ny tr v cng mt kt qu nh th d trc.

S bt li ca hai pht biu SELECT trc l chng tr v nhng hng ch khi c hai ct lin kt c mt gi tr. Ngha l , Khng mt ct no cha gi tr NULL. u ny c th gy ra mt li nu bn c nhng hng c mt gi tr NULL trong c nhng ct s dng trong lin kt v bn mun thc s truy xut nhng hng .nhng lin kt ngai (Outer Jions) gii quyt vn ny .sau y l ba kiu Outer Joins : LEFT OUTER JOIN: (lun c rt ngn ti LIN KT TRI ) tr v tt c nhng hng t bng pha bn tri ca lin kt, bao gm c nhng hng c mt ct cha gi tr NULL. RIGHT OUTER JOIN : (lun c rt ngn ti LIN KT PHI ) tr v tt c nhng hng t mt bng pha bn phi lin kt, bao gm c nhng hng c mt ct cha gi tr NULL. FULL OUTER JOIN : (lun c rt ngn ti LIN KT Y ) tr v tt c nhng hng t nhng bng pha phi v c pha tri cua lin kt, bao gm nhng hng c mt ct c gi tr NULL. chng ta hy xem cp th d di y. u tin thc hin pht biu INSERT thm mt hng vo bng Products: INSERT INTO Products (ProductName, SupplierID) VALUES ('DVD Player', NULL); Ch thch : bn s hc chi tit v pht biu INSERT sau cng trong chng ny. Bn khng cn phi ch nh ct ProducID bi v SQL Server s t ng cung cp mt gi tr s dng mt phng thc t m kho t ng. S nhn dnh ny c thnh lp khi bng Products c to ra, v phng thc t m kho t ng s pht sinh mt lot nhng gi tr ,gi tr c pht sinh ln u tin khi c gi l 1 v c tng ln mt n v vi mi ln gi tip theo. Th d ,ct ProductID t lc u nhp liu n gi cha mt lot nhng gi tr t 1 n 77 ( 77 hng) do pht biu INSERT tip theo s thm mt hng vo bng Products phng thc t m kho t ng s t gi tr cho ct ProductID ca dng mi ny l 78 . Bn ch l ct SupplierID trong pht biu INSERT ny l NULL. Nu by gi bn thc hin pht biu SELECT tip sau, bn s khng nhn thy hng mi va INSERT boi v ct SupplierID ca hng mi ny l NULL v do t kho JOIN trong pht biu khng thc hin c : SELECT ProductID FROM Products JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID; thy c hng mi ny , bn s dng LEFT JOIN trong pht biu SELECT truy xut tt c nhng hng t bng bn tri t kho LEFT JOIN ( trong trng hp ny , l bng Products): SELECT ProductID FROM Products LEFT JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID; Bn cng c th s dng LEFT JOIN vi t kho IS NULL trong pht biu SELECT ch truy xut hng mi ny: SELECT ProductID FROM Products LEFT JOIN Suppliers

ON Products.SupplierID = Suppliers.SupplierID WHERE Products.SupplierID IS NULL;

TRUY XUT NHNG HNG T MT BNG VIEW:


Bn s dng mt bng VIEW truy xut mt b nhng ct t mt ho nhiu bng. bn c th xemmt View nh mt cch linh hot hn xem xt nhng hng lu tr trong nhng bng. th d , mt trong nhng bng view ca c s d liu NorthWind truy xut mt danh sch nhng sn phm (products) xp theo th t abc. V truy xut tn sn phm (product name) , loa sn phm (Categories name), trong s nhng ct khc. Nhng thng tin ny c rt t c hai bng Products v Categories. Bng view ny c t tn l Alphabetical list of products v pht biu SELECT to nn bng View ny nh sau: SELECT Products.*, Categories.CategoryName FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID WHERE (((Products.Discontinued)=0)); Bn c th truy xut tt c cc ct v hng t nhng bng c tham chiu bi View ny bng cch s dng pht biu SELECT di y: SELECT * FROM [Alphabetical list of products]; Bn cng c th truy xut nhng ct ring bit t mt view. Th d : SELECT ProductName, CategoryName FROM [Alphabetical list of products];

THM MT HNG MI VO MT BNG:


Bn d dng pht biu INSERT thm mt hng mi vo mt bng. khi thm mt hng mi , bn ch nh tn ca bng, tn cu nhng ct tu chn , v nhng gi tr cho nhng ct ny . th d : INSERT INTO Customers ( CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax) VALUES ( 'JPCOM', 'Jason Price Company', 'Jason Price', 'Owner', '1 Main Street', 'New York', NULL, '12345', 'USA', '(800)-555-1212', NULL); Ct CustomerID l kho chnh ca bng Customers, do hng mi phi cha mt gi tr duy nht cho ct ny. Bn ch rng pht biu INSERT ch nh mt gi tr NULL cho ct Region v Fax ( ch nh ny s dng t kho NULL). Bn c th s dng Query Analyzer v nhp nhng pht biu INSERT. Hnh 3.22 trinh by pht biu INSERT trc v theo sau l mt pht biu SELECT truy xut hng mi INSERT.

Ch : bn phi cung cp gi tr cho tt c cc ct m c nh nghi l NOT NULL trong bng. cng nh s lng trong INSERT v danh sch VALUES phi ph hp, v c kiu d liu ca mi ct cng phi ph hp. Khi cung cp nhng gi tr cho tt c cc ct ca trong mt hng, bn c th b qua nhng tn ct v ch cung cp nhng gi tr cho mi ct. th d: INSERT INTO Customers VALUES ( 'CRCOM', 'Cynthia Red Company', 'Cynthia Red', 'Owner', '2 South Street', 'New York', NULL, '12345', 'USA', '(800)-555-1212', NULL );

SA I NHNG HNG TRONG MT BNG:


Bn s dng pht biu UPDATE cp nht nhng hng trong bng. khi thc hin cp nht mt hng, bn ch nh tn cu bng , tn nhng ct cn cp nht, v nhng gi tr mi cho nhng ct. Cnh bo: mt cch in hnh , bn cng phi s dng mnh WHERE hn ch nhng hng s c cp nht. nu bn khng cung cp mnh WHERE , th tt c nhng hng trong bng ch nh u s b cp nht. trong rt nhiu trng hp bn bn s phi ch nh gi tr cho kho chnh trong mnh WHERE. Pht biu UPDATE sau sa i ct i ch cho hng trong bng Customers vi CustomerID = JPCOM : UPDATE Customers SET Address = '3 North Street' WHERE CustomerID = 'JPCOM'; hnh 2.23 trnh by pht biu UPDATE , v theo sau vi mt pht biu SELECT truy xut hng c s i.

Bn c th s dng pht biu UPDATE sa i nhiu ct. th d, pht biu sau sa i gi tr cc ct Address v ContactTitle : UPDATE Customers SET Address = '5 Liberty Street', ContactTitle = 'CEO' WHERE CustomerID = 'JPCOM';

XO NHNG HNG T MT BNG:


Bn s dng pht biu DELETE xo nhng hng t mt bng. khi thc hin xo mt hng, bn ch nh tn bng v nhng hng cn xo s dng mnh WHERE . Cnh bo : nu bn b qua mnh WHERE trong pht biu DELETE , tt c nhng hng trong bng u s b xo . bo m rng bn c cung cp mnh WHERE nu nh bn khng mun xo ht hng trong bng. Pht biu DELETE sau xo nhng hng trong Customers vi nhng hng c CustomerID = CRCOM : DELETE FROM Customers WHERE CustomerID = 'CRCOM'; Hnh 3.24 trnh by pht biu DELETE ny , cng vi mt pht biu SELECT chng minh rng hng trn b xo.

Trong phn tip theo chng ta s hc v phn mm c s d liu duy tr tnh ton vn ca nhng thng tin lu tr trongc s nh th no.

S DUY TR TNH TON VN CHO C S D LIU:


Phn mm c s d liu bo m rng nhng thng tin lu tr trong cc bng l nht qun . trong nhng iu kin k thut, n duy tr tnh ton vn ca thng tin. Hai th d v iu ny nh sau : kho chnh cu mt hng lun lun cha mt di tr duy nht. kho phu cu mt hng trong bng con lun tham chiu mt gi tr hin hu trong bng cha. Hy xem nhng g sy ra khi bn c gn mt hng vo mt bng vi mt kho chnh tn ti trong bng. pht biu INSERT sau ang c th thm mt hng vo bng Customers vi CustomerID = ALFKI ( kho ny tn ti trong bng Customers) INSERT INTO Customers ( CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Fax ) VALUES ( 'ALFKI', 'Jason Price Company', 'Jason Price', 'Owner', '1 Main Street',

'New York', NULL, '12345', 'USA', '(800)-555-1212', NULL ); Nu bn c th chy pht biu INSERT ny, bn s nhn mt thng bo li t co8 s d liu : Violation of PRIMARY KEY constraint 'PK_Customers'. Cannot insert duplicate key in object 'Customers'. The statement has been terminated. Hy xem nhng g s sy ra khi bn c sa i mt kho chnh bng cha c mt gi tr c tham chiu t mt kho ph trong bng con. Pht biu UPDATE sau c sa i CustomerID t ALFKI thnh ALFKZ trong bng cha Customers ( hng ny c tham chiu bi nhng hng trong bng con Orders) : UPDATE Customers SET CustomerID = 'ALFKZ' WHERE CustomerID = 'ALFKI'; Nu bn c chy th pht biu UPDATE ny , bn s nhn thng bo li nh sau: Pht biu UPDATE ny xung t vi ct tham chiu rng buc 'FK_Orders_Customers'. S xung t ny sy ra trong c s d liu NorthWind, bng Orders, ct CustomerID. Pht biu ny b gii hn. Pht biu UPDATE ny b hng v hng cha gi tr kho chnh l ALFKI c tham chiu bi nhng han2g trong bng Orders. Thng bo cho bn bit gi tr mi cho ct CustomerID vi phm s rng buc kho ph trn ct CustomerID ca bng Orders. Rng buc n c tn FK_Orders_Customers. Bn cng khng th xo mt hng t mt bng cha c tham chiu bi mt hng trong bng con. Th d, pht biu SELECT di y c th xo hng t bng Customers c ct CustomerID bng ALFKI ( hng ny c tham chiu bi nhng hng trong bng Orders) : DELETE FROM Customers WHERE CustomerID = 'ALFKI'; Nu bn c chy th pht biu DELETE ny ,bn s nhn c thng bo li tng t nh trn.

GOM NHM NHNG CU LNH SQL:


Theo mc nh , khi bn chy mt pht biu INERT, UPDATE, hay DELETE , SQL Server lun ghi li nhng kt qu ca pht biu vo c s d liu . y c th khng phi lun lun l kt qu mong mun ca bn. th d , trong trng hp mt giao dch ngn hng, bn c th mun rt tin t mt ti khon v gii sang mt ti khon khc. Nu bn c hai pht biu UPDATE ring bit thc hin vic rt v gi, v bn mun thc hin kt qu cho mi pht biu UPDATE thng xuyn ch nh mt n v. Nu nh s cp nht b tht bi do mt l do no , v bn mun hu nhng kt qu ca c hai pht biu UPDATE ny. Ch thch: lun lun thc hin vic ghi li nhng kt qu ca nhng pht biu SQL c hiu nh l mt cam kt, hay s giao ph cho nhng cu lnh SQL. Vic hu nhng kt qu ca nhng cu lnh SQL c hiu nh mt s tr li tnh trng c ( nh khi cha thc thi UPDATE). Bn c th nhm cc cu lnh SQL trong mt trasaction. V sau bn c th thc hin hoc quay tr li nhng cu lnh SQL trong transaction nh mt n v. th d , hai pht biu trc trong th d v ngn hng c th c t vo trong mt transaction , v ri bn c th giao ph s thc hin hay quay ngc giao dic5ch ny nh mt n v, Tu thuc vo hai pht biu ny c thnh cng hay khng. Bn khi chy mt giao dch s dng pht biu BEGIN TRANSASTION hay phin bn tc k ,BEGIN TRAN. Sau bn c th thc hin nhng pht biu SQL to thnh transaction ny. giao ph s thc thi cho

transaction bn thc thi mt pht biu COMMIT TRANSACTION hoc mt trong s trong phin bn tc k, COMMIT TRAN hoc COMMIT. roll back mt transaction ,bn thc hin mt pht biu ROLLBACK TRANSACTION hoc mt trong s nhng phin bn tc k , ROLLBACK TRANS hay ROLLBACK. Ch : theo mc nh , transaction l phc hi (rollback) . bn phi lun lun ch nh r rng commit hay roll back mt transaction cho bit bn mun lm g. Hy xem mt th d , transaction di y bao gm hai pht biu INSERT : pht biu th nht thm mt hng vo bng Customers, v pht biu th hai thm mt hng vo bng Orders. Cui cng , giao dch ny c giao ph s dng pht biu COMMIT : BEGIN TRANSACTION; INSERT INTO Customers ( CustomerID, CompanyName ) VALUES ( 'SOCOM', 'Steve Orange Company' ); INSERT INTO Orders ( CustomerID ) VALUES ( 'SOCOM' ); COMMIT; Hnh 3.25 trnh by giao dch ny, theo sau vi hai pht biu SELECT tr v hai hng mi INSERT

Transaction tip theo bao gm pht biu INSERT tng t, ngoi tr lc ny transaction l phc hi s dng pht biu ROLLBACK. BEGIN TRANSACTION; INSERT INTO Customers ( CustomerID, CompanyName ) VALUES ( 'SYCOM', 'Steve Yellow Company' ); INSERT INTO Orders ( CustomerID ) VALUES (

'SYCOM' ); ROLLBACK; Bi v transaction l phc hi (rolled back) , hai hng thm vo bi hai pht biu INSERT c cun lui tr li( hy). Bn nn kim tra li ca mt transaction trc khi quyt nh thc hin mt COMMIT hay ROLLBACK bi v nhng li khng phi lun lun nh ch vic thc thi hng tip theo. lm iu ny trong SQL Server, bn s dng hm @@ERROR. Hmny tr li s khngbt c khi no mt pht biu c th thi v khng gy ra li. nu @@ERROR tr v mt gi tr khc khng, bn bit sy ra mt li. Nu @@ERROR tr v 0, bn thc hin mt COMMIT, ngc li bn thc hin mt ROLLBACK. Bn cng c th gn mt tn cho transaction ca bn trong pht biu BEGIN TRANSACTION. iu ny hu ich nh n cho bit transaction no bn ang lm vic . Th d sau y trnh by vic gn tn cho mt transaction, cng vi s s dng hm @@ERROR xc nh nn thc hin mt COMMIT hay mt ROLLBACK : BEGIN TRANSACTION MyTransaction; INSERT INTO Customers ( CustomerID, CompanyName ) VALUES ( 'SYCOM', 'Steve Yellow Company' ); INSERT INTO Orders (CustomerID ) VALUES ( 'SYCOM' ); IF @@Error = 0 COMMIT TRANSACTION MyTransaction; ELSE ROLLBACK TRANSACTION MyTransaction; Ch : tn ca transaction l MyTransaction, v tn ny c s dng trong pht biu COMMIT v ROLLBACK. Ch thch:bn s dng pht biu IF nh iu kin thc thi mt pht biu (cu lnh SQL). Bn s hc nhiu hn v iu ny chng 4, "Introduction to Transact-SQL Programming."

GII THIU V NHNG PHT BIU NGN NG NH NGHA D LIU:


Nh cp trc, nhng pht biu DDL cho php bn to nhng cu trc c s d liu nh cc bng v cc index .

TO MT BNG:
Bn to mt bng s dng pht biu CREATE TABLE. Th d , hy cho l bn mun lu tr nhng chi tit cho mt s ngi trong c s d liu. gi s bn mun lu tr h, tn v ngy sinh ca mt ngi. hy gi bng ny l Persons. Bn cng mun nhn dng duy nht mi hng trong bng Persons s dng mt ID dng s, n hat ng nh mt kha chnh trong bng. pht biu CREATE TABLE sau y to mt bng Persons : CREATE TABLE Persons ( PersonID int CONSTRAINT PK_Persons PRIMARY KEY, FirstName nvarchar(15) NOT NULL, LastName nvarchar(15) NOT NULL,

DateOfBirth datetime ); Bn s dng mnh CONSTRAINT (rng buc) hn ch nhng gi tr lu tr trong bng hay ct. bn ch rng mnh CONSTRAINT c s dng ch nh kha chnh ca bng s dng t kha PRIMARY KEY. Kha chnh ny l Ct PersonID, v rng buc ny c tn l PK_Persons. Ct kha ny c kiu int, c ngha l n lu tr nhng s intergers. Mi hng trong bng Persons phi c mt s duy nht cho ct PersonsID. Ct FirstName v LastName l nhng ct nvarchar c th cha n 15 k t. c hai ct ny c nh ngha s dng rng buc NOT NULL. NOT NULL ch nh l bn phi cung cp mt gi tr cho ct. theo mc nh l NULL, c ngha l bn khng cn phi cung cp mt gi tr cho ct. Ch thch: nhng kha chnh lun lun i hi mt gi tr, v do tuyt i khng d8c b trng. Ct DateOfBirth thuc kiu datetime, c ngha n c th d tr gi tr ngy v gi, pht, giy. Ct ny khng c nh ngha rng buc NOT NULL, do s s dng gi tr m nh l NULL.

SA I MT BNG:
Bn thay i mt bng ang tn ti s dng pht biu ALTER TABLE. Bn c th thm hoc xa mt ct , thm hoc xa mt rng buc s dng pht biu ALTER TABLE. Th d, pht biu ALTER TABLE sau y thm nt ct tn Address vo bng Persons : ALTER TABLE Persons ADD Address nvarchar(50); Ct Address l mt nvarchar c th ch a trn 50 k t. Th d tip theo xa ct Adrress t bng Persons: ALTER TABLE Persons DROP COLUMN Address; Th d tip theo thm mt ct tn EmployerID vo bng Persons, ghi tn cng ty m mt ngi lm vic: ALTER TABLE Persons ADD EmployerID nchar(5) CONSTRAINT FK_Persons_Customers REFERENCES Customers(CustomerID); Ct EmployerID l mt kha ph cho ct CustomerID ca bng Customers. Rng buc ny c tn FK_Persons_Customers.

XA MT BNG:
Bn thm mt index(ch s) vo mt bng s dng pht biu CREATE INDEX. Mt index cho php bn . mt index cho php bn tm mt hng mt cch nhanh chng hn khi bn s dng index(ch s) trong mnh WHERE. Th d , pht biu CREATE INDEX di y thm mt index vo ct LastName ca bng Persons. CREATE INDEX LastNameIndex ON Persons(LastName); Mo nh : nu bn thng xuyn s dng mt ct trong mnh WHERE , bn cn xem xet thm mt ch s (index) vo ct .

Ni chung, bn cn phi to mt ch s trn mt ct ch khi bn tm thy l bn ang truy xut mt s t hng t mt bng ang cha rt nhiu hng. Mt kinh nghim tt l mt ch s s hu ch khi bn ch i bt k truy vn n no truy xut 10 phn trm hoc t so vi tng s nhng hng trong mt bng. iu ny c nghi l ct thch hp cho mt ch s (index) phi c s dng lu tr mt di rng ca nhng gi tr. Ct thch hp nht cho s ch s ho l mt ct c mt s duy nht cho mi mu tin( ct ko chnh), nhng ct khng thch hp cho s ch s ho l nhng ct ch cha mt dy nh nhng s m ,th d 1,2,3 hoc 4. s xem xt ny p dng cho tt c cc kiu d liu khng ch dnh cho kiu s. Thng thng ,DBA chu trch nhim to ra nhng ch s, nhng l mt ngi pht trin ng dngbn c l bit nhiu v trnh ng dng hn l DBA v c kh nng nhn bit ct no lthch hp nht cho s ch s ho.

XO MT INDEX:
Bn xo mt index trong mt bng s dng pht biu DROP INDEX . th d, pht biu DROP INDEX sau xo LastNameIndex t bng Persons. DROP INDEX Persons.LastNameIndex;

Vic truy nhp mt C s d liu s dng Visual Studio .NET


Trnh duyt server ca Visual Studio .NET cho php bn s dng mt tp con ca nhng c tnh c cha trong nhng th mc c s d liu ca Enterprise Manager. c bit, trnh duyt Server cho php bn xem, to ra, v son tho nhng c s d liu, nhng s c s d liu, nhng bng, nhng view, nhng th tc lu tr, v nhng hm do ngi dng nh ra. Trong mc ny, bn s c gii thiu v trnh duyt Server v mt s chc nng ca n. Nh bn s thy, trnh duyt Server vn hnh mt cch tng t vi Enterprise Manager, n c bao trm trong Chng 2. Bi v s ging nhau gia trnh duyt Server v Enterprise Manager, Ti s ch tm tt bao trm trnh duyt Server y. Bc u tin ca bn l kt ni ti mt c s d liu. lm iu ny, bn chon Tools Connect To Database. Vic ny hin th hp Data Link Properties . Hnh 3.26 trnh by hp thoi ny vi nhng mc thch hp kt ni ti c s d liu Northwind chy trn my tnh JMPRICE- LAP.

Hnh 3.26: vic nhp nhng chi tit c s d liu s dng hp thoi Data Link Properties Mt khi bn nhp vo nhng chi tit c s d liu ca bn, bc th hai ca bn l kch nt Test Connection xc minh nhng chi tit kt ni c s d liu. Kch nt Ok mt khi s th kt ni thnh cng.

Mt khi bn c kt ni ti c s d liu, bn c th xem nhng th nh nhng bng. Bn cng c th truy xut v sa i nhng hng trong nhng bng. Bn c th khoan su xung nhng bng trong c s d liu bi kch Add icon (thm biu tng) trong cy trong trnh duyt Server, v Bn c th truy xut nhng hng t mt bng bi kch chut phi trn bng trong cy v chn Retrieve Data From Table trong ca s s ra. Hnh 3.27 cho thy nhng hng t bng nhng khch hng .

Hnh 3.27: xem nhng hng trong bng nhng khch hng s dng trnh duyt Server Bn c th nhp nhng cu lnh SQL bi kch nt Show SQL Pane trong thanh cng c, nh trong Hnh 3.28.

Hnh 3.28: vic nhp mt cu lnh SQL Bn c th xy dng nhng cu lnh SQL mt cch trc quan bi kch nt Show Diagram trong thanh cng c v chn nhng ct t bng, nh trnh by trong Hnh 3.29. bn c th thy, Ti chn nhng ct ContactName, CompanyName, v CustomerID t bng nhng khch hng.

Hnh 3.29: xy dng mt cu lnh SQL cch trc quan Bn c th xem nhng thuc tnh ca mt ct trong mt bng bi kch chut phi trn ct v la chn Properties t ca s bung ra. Hnh 3.30 cho thy nhng thuc tnh ca ct CustomerID ca bng nhng khch hng .

Hnh 3.30: nhng thuc tnh ca nhng ct CustomerID Bn ch mi s lc qua Server Explorer (trnh duyt Server) trong mc ny. Nu bn c VS .NET, bn cn phi thoi mi th nghim trnh duyt Server ny- l cch tt nht hc v n.

Tm lc
Trong chng ny, bn hc s dng SQL (s xuy din r rng) truy nhp mt c s d liu nh th no. SQL l ngn ng tiu chun truy cp nhng c s d liu quan h. Vi SQL, Bn ni vi c s d liu d liu no bn mun truy cp, v phn mm c s d liu tnh tan chnh xc cch ly d liu ny. Bn c th nhp v chy nhng cu lnh SQL tip cn mt c s d liu my ch phc v SQL s dng cng c b phn tch truy vn (Query Analyzer) .

C hai kiu chnh thuc nhng cu lnh SQL: nhng pht biu ngn ng x l d liu (DML) "Data Manipulation Language", v nhng pht biu ngn ng nh ngha d liu (DDL) "Data Definition Language". Nhng pht biu DML cho php bn truy xut, thm, sa i, v xa nhng hng c ct gi trong c s d liu. Nhng pht biu DDL cho php bn to ra nhng cu trc c s d liu nh nhng bng v nhng ch s. Bn s dng mt pht biu SELECT SQL truy xut nhng hng, mt pht biu INSERT thm nhng hng, mt pht biu UPDATE iu chnh nhng hng, v mt pht biu xa loi b nhng hng. Bn kho st trnh cng c duyt Server Visual Studio .NET'. n cho php bn kt ni ti mt c s d liu. Trnh duyt Server cha mt tp con ca chc nng c xut bi Enterprise Manager. Trong chng k tip, bn s c gii thiu lp trnh Transact-SQL.

Chng 4: Gii thiu v lp trnh giao dch- SQL (Transact-SQL )


Tng quan
Transact-SQL (Giao dch- SQL) l s thc thi y ca Microsoft ca SQL, V n cha nhng cu trc lp trnh b sung . (N thng c vit tt l T- SQL, mt quy c m bn s thy trong chng ny.) T- SQL cho php bn vit nhng chng trnh cha nhng cu lnh SQL, cng vi tiu chun lp trnh cu trc nh nhng bin, lgic c iu kin, nhng vng lp, nhng th tc, v nhng hm. c trng trong chng ny: Nhng nn tng ca Transact- SQL S dng nhng hm To nhng hm do ngi dng nh ngha Gii thiu v nhng th tc lu tr Gii thiu v nhng trig (triggers) Nhng nn tng ca Transact-SQL (Giao dch- SQL) Trong mc ny, bn s hc mt s yu t cn thit v lp trnh xy dng sn c trong T- SQL. c bit, bn s thy cch s dng nhng bin, nhng ch thch, nhng lgic c iu kin . Bn cng s thy cch s dng mt s pht biu cho php bn thc hin nhy v nhng vng lp nh th no. Cui cng, bn s kho st nhng con tr, cho php bn x l nhng hng c tr li t c s d liu mt ti mt thi im. Chng ta hy bt u vi vic kho st nhng bin.

S dng nhng bin (Variables)


Mt bin cho php bn ct gi mt gi tr trong b nh ca mt my tnh. Mi bin c mt kiu ch nh loi ca gi tr s c ct gi trong bin ny. Bn c th s dng bt k nhng kiu c trnh by trc trong bng 2.3 trong chng 2 " Gii thiu v c s d liu ." Bn khai bo mt bin s dng pht biu DECLARE, theo sau l tn bin v kiu ca n. Bn t mt k t (@) trc tn ca bin . C php sau y minh ha s s dng pht biu DECLARE : DECLARE @name type Vi name l tn ca bin , v type l kiu cabin . Chng hn, nhng pht biu sau y khai bo hai bin c tn MyProductName V MyProductID:

DECLARE @MyProductName nvarchar(40) DECLARE @MyProductID int Nh bn c th thy, MyProductName thuc kiu nvarchar, v MyProductID thuc kiu int. Bn c th t nhiu khai bo bin trn cng mt hng. Chng hn: DECLARE @MyProductName nvarchar(40), @MyProductID int Nhng bin thot tin c gn ti null. Bn gn mt gi tr ca bin s dng s pht biu SET. Chng hn, nhng pht biu sau y t MyProductName l chai v MyProductID l 7: Pht biu SELECT sau y s dng nhng bin ny trong mnh WHERE: SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID = @MyProductID OR ProductName = @MyProductName; Bn c th thc thi T- SQL s dng Query Analyzer, v hnh 4.1 cho thy u ra t nhng v d trnh by trong mc ny.

Hnh 4.1: Thc thi T- SQL s dng Query Analyzer

S dng nhng ch thch


Bn thm nhng ch thch gii thch m ca bn, lm chng d hiu hn cho c chnh bn ln nhng lp trnh vin khc. Bn c th ngh rng bn hiu m ca mnh d dng, nhng su thng sau , khi bn tr li n bo tr , Bn c l qun nhng iu phc tp do chnh bn hnh thnh ! im chnh l bn cn phi thm nhng ch thch vo m ca bn gip bn hiu d dng hn, nhng ng ngh rng bn phi ch thch mi hng. nn s dng nhng ch thch cch thn trng. Bn cn nh du nhng ch thch ca bn vi nhng c trng ring sao cho my ch phc v SQL l i chng v khng s l ti . C hai kiu ch thch : hng n v nhiu hng. Mt ch thch hng n s dng hai du tr (--) v c th tri trn ch mt hng, nh trnh by di y: -- A single-line comment may only span one line. -- Bo SQL Server l i mi th cho ti kt thc ca hng ny.

Mt ch thch nhiu hng bt u vi mt du (/*) m u ch thch v nhng kt thc vi mt du (*/) kt thc ch thch: /* A multi-line comment may span more than one line. */ Du /* bo SQL Server l i mi th trong dng ny cho ti du */ k tip, khng c vn g v s lng hng ch thch c bao trong cp du ny. Nu bn s dng nhng ch thch hng n trong v d ny, bn phi thm nhng k t -- u ca mi dng ch thch. Nhng ch thch nhiu hng tt nhin cng c th dng cho ch mt hng /* Another comment */

S dng Lgic c iu kin


Lgic c iu kin cho php bn thc thi nhng nhnh khc nhau ca m da trn gi tr Boolean ca mt biu thc cho l true hay false . Chng hn, bn c th mun kim tra nu mt iu kin li l true th trnh by mt thng bo. Bn s dng IF v ty chn nhng t kha ELSE thc hin lgic c iu kin. C php sau y minh ha s s dng lgic c iu kin IF condition statement1 [ELSE statement2] Vi condition l mt biu thc i s Boole n nh gi ti true hay false. Nu iu kin l true, th statement1 c thc hin, trng hp khc statement2 c thc hin. Ghi nh: Bn c th thay th mt pht biu n vi nhiu pht biu bng cch sp xp nhng pht biu ny bn trong nhng pht biu BEGIN v END. Quy tc ny ng dng cho tt c cu trc lp trnh T- SQL. C php sau y cho thy s thay th nhng pht biu n vi mt khi nhng s pht biu c t bn trong BEGIN v END. IF condition BEGIN statements1 END ELSE BEGIN statements2 END Vi statements1 v statements2 l nhng pht biu. Bn cng c th s dng mt pht biu ELSE ty chn thc thi mt nhnh m khc nu iu kin l false. Ghi ch: Bn c th lng nhng pht biu IF vo nhau ti su bt k . V d sau y trnh by nhng ct ProductID, ProductName, v UnitPrice cho bt k hng no t bng Products c mt UnitPrice nh hn 5 USD. Bn ch s s dng lnh in (PRINT) gi ra mt hng trong v d ny. IF (SELECT COUNT(*) FROM Products WHERE UnitPrice < 5) > 0 BEGIN

PRINT 'The following products have a UnitPrice of less than $5:' SELECT ProductID, ProductName, UnitPrice FROM Products WHERE UnitPrice < 5 END ELSE BEGIN PRINT 'There are no products that have a UnitPrice of less than $5' END

S dng nhng pht biu CASE


Bn s dng pht biu CASE so snh mt gi tr vi mt danh sch nhng gi tr v thc hin mt hoc nhiu pht biu khi mt gi tr ph hp c tm thy. Chng hn, pht biu CASE sau y tr li Massachusetts CASE 'MA' WHEN 'CA' THEN 'California' WHEN 'MA' THEN 'Massachusetts' WHEN 'NY' THEN 'New York' END V d k tip s dng mt pht biu SELECT truy xut gi tr Massachusetts c tr li bi pht biu CASE: DECLARE @State nchar(2) SET @State = 'MA' DECLARE @StateName nvarchar(15) SELECT CASE @State WHEN 'CA' THEN 'California' WHEN 'MA' THEN 'Massachusetts' WHEN 'NY' THEN 'New York' END Bn c th ct gi gi tr c truy xut bi pht biu SELECT trong mt bin, nh trong v d k tip DECLARE @State nchar(2) SET @State = 'MA' DECLARE @StateName nvarchar(15) SELECT @StateName = CASE @State WHEN 'CA' THEN 'California' WHEN 'MA' THEN 'Massachusetts' WHEN 'NY' THEN 'New York' END PRINT @StateName u ra t v d ny nh sau: Massachusetts Bn cng c th so snh mt gi tr ct trong mt pht biu CASE. Chng hn: SELECT Price = CASE

WHEN UnitPrice IS NULL THEN 'Unknown' WHEN UnitPrice < 10 THEN 'Less than $10' WHEN UnitPrice = 10 THEN '$10' ELSE 'Greater than $10' END FROM Products Bn ch : t v d ny bn cng c th cung cp mt iu kin ELSE catchall trong mt pht biu CASE.

S dng nhng vng lp "WHILE"


Bn s dng mt vng lp "WHILE" chy mt hoc nhiu pht biu nhiu ln. Mt vng lp "WHILE" chy cho n khi mt iu kin ch nh chuyn gi tr thnh false. C php cho mt vng lp WHILE nh sau: WHILE condition statement V d sau y cho thy mt vng lp "WHILE" DECLARE @count int SET @count = 5 WHILE (@count > 0) BEGIN PRINT 'count = ' + CONVERT(nvarchar, @count) SET @count = @count -1 END Vng lp ny c chy cho n khi bin m count tr thnh 0, v u ra t m ny nh sau:
count count count count count = = = = = 5 4 3 2 1

Hm CONVERT() (chuyn i) c dng chuyn i mt gi tr t kiu ny sang kiu khc. Chng hn, CONVERT ( nvarchar, @count) chuyn i bin m count ti kiu nvarchar, ri n c th c s dng vi lnh PRINT (in).

Pht biu CONTINUE (tip tc)


Bn s dng pht biu CONTINUE nhy ti ln lp tip theo ca mt vng lp "WHILE" b qua qua bt k m cn li no trong ln lp hin thi. pht biu CONTINUE gy ra s thc hin nhy tr li im khi u ca ln lp k tip. V d sau y cho thy mt vng lp "WHILE" s s dng pht biu CONTINUE bt u ln lp tip theo ca vng lp nu bin m count bng 2: DECLARE @count int SET @count = 5 WHILE (@count > 0) BEGIN PRINT 'count = ' + CONVERT(nvarchar, @count) SET @count = @count -1 IF (@count = 2) BEGIN

SET @count = @count -1 CONTINUE END END u ra t m ny nh sau: count = 5 count = 4 count = 3 count = 1 Bn ch kt qu khng hin th bin m count = 2 . y l v pht biu CONTINUE thc thi s nhy qua ln lp ny.

Pht biu BREAK


Bn s dng pht biu BREAK kt thc mt vng lp "WHILE" ngay lp tc. Pht biu BREAK gy ra s thc hin nhy khi vng lp v tip tc thc hin bt k pht biu no sau vng lp ny. V d sau y cho thy mt vng lp "WHILE" s dng pht biu BREAK kt thc vng lp khi bin m count bng 2 DECLARE @count int SET @count = 5 WHILE (@count > 0) BEGIN PRINT 'count = ' + CONVERT(nvarchar, @count) SET @count = @count -1 IF (@count = 2) BEGIN BREAK END END u ra t m ny nh sau: count = 5 count = 4 count = 3

S dng nhng nhn v Pht biu GOTO


Bn s dng pht biu GOTO nhy ti mt nhn c ch nh trong m ca bn; bn s dng mt nhn xc nh mt pht biu trong m ca bn. Bn phi nh ngha nhn trc khi pht hnh GOTO ti nhn ny. Trc khi ti trnh by nhng chi tit ca pht biu GOTO, bn cn phi thc c s s dng n c coi l mt thc hnh lp trnh ngho nn, v bn cn phi trnh s dng n nu c th c.Thng thng lun c cu trc m bn khng cn s dng pht biu GOTO. Nh ni, ti bao gm n trong chng ny ch c tnh cht b sung. Nh c cp, pht biu GOTO yu cu bn to ra mt nhn trong chng trnh ca bn. Bn lm iu ny bng cch t mt nh danh cha tn nhn trong m ca bn, theo sau l mt du hai chm (:) . V d sau y to ra mt nhn c tn myLabel: myLabel: Ri bn c th s dng pht biu GOTO nhy ti nhn ny, chng hn: GOTO myLabel V d sau y cho thy s s dng mt nhn v pht biu GOTO:

DECLARE @count int SET @count = 5 myLabel: PRINT 'count = ' + CONVERT(nvarchar, @count) SET @count = @count -1 IF (@count > 0) BEGIN GOTO myLabel END u ra t m ny nh sau: count = 5 count = 4 count = 3 count = 2 count = 1

S dng nhng pht biu RETURN


Bn s dng pht biu RETURN thot ra khi mt th tc lu tr hay nhm nhng pht biu. Bt k pht biu no sau RETURN ca bn u khng c thc hin. Bn c th cng tr v mt gi tr s dng pht biu RETURN . C php cho pht biu RETURN nh sau: RETURN [int_expression] Vi int_expression l bt k biu thc no c kt qu l mt gi tr int. Ghi ch: Bn c th tr v mt gi tr ch khi s dng pht biu RETURN vi mt th tc lu tr. Bn s thy mt v d v iu ny sau trong mc "Gii thiu v nhng th tc lu tr ". V d sau y cho thy s s dng pht biu RETURN: DECLARE @count int SET @count = 5 WHILE (@count > 0) BEGIN PRINT 'count = ' + CONVERT(nvarchar, @count) SET @count = @count -1 IF (@count = 2) BEGIN RETURN END END u ra t m ny nh sau: count = 5 count = 4 count = 3

S dng nhng pht biu WAITFOR


C nhng ln khi bn mun chng trnh ca bn tm dng trc khi chy m no thc hin mt tc v c th, nh chy mt t chng trnh vo ban m cp nht nhng bn ghi khch hng. Bn s dng s pht biu WAITFOR ch r mt khong thi gian hay thi gian i cho n khi tip tc s thc hin ca m. C php cho pht biu WAITFOR nh sau:

WAITFOR {DELAY 'time interval' | TIME 'actual time'} Bn c th ch r khong thi gian i s dng t kha DELAY , hay bn c th ch r thi gian thc t i cho n s dng t kha TIME. Bn c th ch r mt khong thi gian hay mt thi gian thc t trong nh dng HH:MM:SS, vi HH l gi ( trong nh dng 24), MM l pht, v SS l giy. y l mt s v d: WAITFOR DELAY '00: 00: 05' i trong khong thi gian 5 giy. WAITFOR DELAY '23: 10: 25' i trong khong thi gian 23 gi, 10 pht, v 25 giy. WAITFOR TIME '20: 15: 10' i cho n 10 giy sau 10: 15 PM. Nhng v d sau y in ra mt thng bo sau 5 giy tri qua BEGIN WAITFOR DELAY '00:00:05' PRINT '5 seconds have elapsed' END

S dng nhng pht biu RAISERROR


Bn s dng s pht biu RAISERROR pht sinh mt thng bo li. Bn in hnh s mun lm iu ny nu mt li xut hin trong mt trong s nhng th tc lu tr ca bn, Bn s thy cch s dng sau trong mc " To nhng th tc lu tr ." C php c n gin ha cho pht biu RAISERROR nh sau: RAISERROR ({number | description}{, severity, state}) Vi number l s c trng cho li, gi tr ca n nm gia 50,001 v 2,147,483,648. description l mt thng bo m khng c vt qu 400 k t. severity l mc ca li v phi nm trong khang t 0 n 18 (18 l li nng nht). state l mt gi tr bt k nm gia 1 v 127, v m t thng tin v trng thi yu cu ca li . Nhng v d sau y cho thy s s dng pht biu RAISERROR: RAISERROR (50001, 15, 1) RAISERROR ('No row with that ProductID was found', 10, 1)

S dng nhng con tr


Khi bn thc hin mt pht biu SELECT, tt c nhng hng c tr v trong mt ln truy cp. iu ny c l khng lun lun thch hp. Chng hn, bn c th mun s l hot ng no da vo nhng gi tr ct c truy xut cho mt hng c th. lm iu ny, bn c th s dng mt con tr (cursor) x l nhng hng c truy xut t c s d liu mi hng mt ln. Mt con tr cho php bn bc qua nhng hng c tr v bi mt pht biu SELECT c th. Bn theo nhng bc ny khi s dng mt con tr: 1. Khai bo nhng bin ct gi nhng gi tr ct t pht biu SELECT. 2. Khai bo con tr (cursor), ch r pht biu SELECT ca bn. 3. M con tr (cursor) cc bn. 4. Np nhng hng t con tr ca bn v. 5. ng con tr ca bn. Bn s hc nhng chi tit ca nhng bc ny trong nhng mc sau y.

Bc 1: Khai bo nhng bin lu tr gi tr ct t pht biu SELECT


Nhng bin ny phi thch hp vi nhng kiu ct ca nhng hng c truy xut. Chng hn, bn s mun s dng mt bin int lu tr gi tr t mt ct int , vn vn. V d sau y khai bo ba bin lu tr nhng ct ProductID, ProductName, v UnitPrice t bng Products: DECLARE @MyProductID int DECLARE @MyProductName nvarchar(40) DECLARE @MyUnitPrice money

Bc 2: Khai bo Con tr (Cursor)


Mt khai bo con tr gm c mt tn m bn gn ti con tr v pht biu SELECT m bn mun thc hin. Pht biu SELECT ny khng tht s c chy cho n khi bn m con tr (cursor). Bn khai bo con tr ca bn s dng pht biu DECLARE . V d sau y khai bo mt con tr c tn ProductCursor vi mt pht biu SELECT m truy xut nhng ct ProductID, ProductName, v UnitPrice cho 10 sn phm u tin t bng Products: DECLARE ProductCursor CURSOR FOR SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID <= 10

Bc 3: M con tr (Cursor)
By l lc m con tr ca bn, n chy pht biu SELECT c nh ngha trc trong pht biu DECLARE . Bn m mt con tr s dng pht biu OPEN. V d sau y m ProductCursor, v do cng chy pht biu SELECT truy xut nhng hng t bng Products: OPEN ProductCursor

Bc 4: Ti v nhng hng t Con tr


By gi bn phi c mi hng t con tr ca bn. lm iu ny, bn s s dng pht biu FETCH . Con tr ca bn c th cha nhiu hng, v do mt vng lp "WHILE" c i hi c ln lt mi hng. xc nh khi vng lp kt thc, bn c th s dng hm @@FETCH_STATUS. Hm ny tr li mt trong s nhng gi tr c th xy ra c trnh by trong Bng 4.1. Bng 4.1: nhng gi tr tr v t hm @@FETCH_STATUS Gi tr 0 -1 -2 M t Pht biu FETCH tr v mt hng mt cch thnh cng . Pht biu FETCH b hng hay hng yu cu bn ngoi tp hp kt qu tr v. Hng c ti v khng hin hu.

V d sau y trnh by mt vng lp c tng hng n t ProductCursor: FETCH NEXT FROM ProductCursor INTO @MyProductID, @MyProductname, @MyUnitPrice PRINT '@MyProductID = ' + CONVERT(nvarchar, @MyProductID) PRINT '@MyProductName = ' + CONVERT(nvarchar, @MyProductName) PRINT '@MyUnitPrice = ' + CONVERT(nvarchar, @MyUnitPrice) WHILE @@FETCH_STATUS = 0

BEGIN FETCH NEXT FROM ProductCursor INTO @MyProductID, @MyProductname, @MyUnitPrice PRINT '@MyProductID = ' + CONVERT(nvarchar, @MyProductID) PRINT '@MyProductName = ' + CONVERT(nvarchar, @MyProductName) PRINT '@MyUnitPrice = ' + CONVERT(nvarchar, @MyUnitPrice) END Bn ch : iu kin @@FETCH_STATUS = 0 c s dng trong vng lp "WHILE" kim tra pht biu FETCH c tr v mt hng cch thnh cng hay khng. Khi iu kin ny khng cn ng na (false), vng lp kt thc. Mo nh: Bn c th ly s lng ca hng c lu tr trong mt con tr s dng hm @@CURSOR_ROWS. Bn s hc nhiu hn v nhng hm sau trong mc "S dng nhng hm ".

Bc 5: ng con tr
ng con tr ca bn s dng pht biu CLOSE. Nhng v d sau y kt thc ProductCursor: CLOSE ProductCursor Bn cng cn phi loi b s tham chiu ti con tr ca bn s dng pht biu DEALLOCATE . Vic ny gii phng nhng ti nguyn h thng c dng bi con tr ca bn. V d sau y loi b s tham chiu ti ProductCursor s dng pht biu DEALLOCATE (thu hi phn b). DEALLOCATE ProductCursor Mc sau y cho thy mt script v d y m bn c th chy s dng Query Analyzer. Script ny cha tt c nm bc v s dng mt con tr.

V d y : ProductCursor.sql
Danh sch 4.1 trnh by script ProductCursor.sql . Bn c th ti file ny vo trong Query Analyzer v chy th n Danh sch 4.1: S dng nhng con tr /* ProductCursor.sql uses a cursor to display the ProductID, ProductName, and UnitPrice columns from the Products table */ USE Northwind -- step 1: declare the variables DECLARE @MyProductID int DECLARE @MyProductName nvarchar(40) DECLARE @MyUnitPrice money -- step 2: declare the cursor DECLARE ProductCursor CURSOR FOR SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID <= 10 -- step 3: open the cursor OPEN ProductCursor

-- step 4: fetch the rows from the cursor FETCH NEXT FROM ProductCursor INTO @MyProductID, @MyProductname, @MyUnitPrice PRINT '@MyProductID = ' + CONVERT(nvarchar, @MyProductID) PRINT '@MyProductName = ' + CONVERT(nvarchar, @MyProductName) PRINT '@MyUnitPrice = ' + CONVERT(nvarchar, @MyUnitPrice) WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM ProductCursor INTO @MyProductID, @MyProductName, @MyUnitPrice PRINT '@MyProductID = ' + CONVERT(nvarchar, @MyProductID) PRINT '@MyProductName = ' + CONVERT(nvarchar, @MyProductName) PRINT '@MyUnitPrice = ' + CONVERT(nvarchar, @MyUnitPrice) END -- step 5: close the cursor CLOSE ProductCursor DEALLOCATE ProductCursor u ra cho hai hng u tin c c bi con tr nh sau: @MyProductID = 1 @MyProductName = Chai @MyUnitPrice = 18.00 @MyProductID = 2 @MyProductName = Chang @MyUnitPrice = 19.00

S dng nhng hm
SQL Server cung cp mt s hm bn c th s dng ly nhng gi tr t c s d liu. Chng hn, bn c th s dng hm count() ly s lng ca hng c trong mt bng. Nhng hm c tch ra vo trong nhng phm tr c trnh by trong Bng 4.2. Bng 4.2: nhng hm Phm tr Chc nng Aggregate Mathematical String Date and time System Configuration Cursor Metadata Security System statistical M t Tr v thng tin da vo mt hoc nhiu hng trong mt bng. Thc hin nhng s tnh ton. Thc hin nhng thao tc chui. Lm vic vi ngy thng v nhng gi Tr v thng tin trn SQLServer. Tr v thng tin trn cu hnh ca Server. Tr v thng tin trn nhng con tr. Tr v thng tin trn c s d liu v nhiu tit mc c s d liu, nh nhng bng. Tr li thng tin trn nhng ngi s dng c s d liu v nhng vai tr. Tr v thng tin thng k trn SQL Server.

Text and image

Thc hin nhng thao tc vn bn v nh.

Bn s hc v nm hm u tin trong nhng mc sau y. Nhng hm khc bn ngoi phm vi ca sch ny, v chng thuc v s quan tm chnh yu ca nhng ngi qun tr c s d liu. Bn c th hc v nhng chc nng trong nhng ti liu sch trc tuyn SQL Server.

S dng nhng chc nng Tng th


Trc , Bn thy cch s dng hm tng th COUNT() ly s lng hng. COUNT() v mt s hm tng th khc bn c th s dng vi SQL Srver c lit k trong Bng 4.3. Biu thc bn c th chuyn cho nhng hm tng th in hnh l mt ct n, nhng n cng c th l mt trng c tnh ton. ALL c ngha l hm c ng dng vo tt c nhng gi tr ct, trong khi DISTINCT ch c ngha l hm ch ng dng ti nhng gi tr duy nht. ALL l mc nh. Bng 4.3: nhng hm tng th HM AVG([ ALL | DISTINCT ] expression) COUNT([ ALL | DISTINCT ] expression ] | *) COUNT_BIG([ ALL | DISTINCT ] expression} | *) M T Tr li gi tr trung bnh cng ca nhng gi tr trong mt nhm. Tr li s lng hng trong mt nhm. COUNT() tr li mt gi tr kiu d liu int. Tr li s lng gi tr trong mt nhm. COUNT_BIG() tr v mt gi tr kiu d liu bigint

MAX([ ALL | DISTINCT ] expression) Tr li gi tr ln nht. MIN([ ALL | DISTINCT ] expression) SUM([ ALL | DISTINCT ] expression) STDEV(expression) STDEVP(expression) VAR(expression) VARP(expression) Tr li gi tr nh nht. Tr li tng ca bt k gi tr khng null no. SUM() ch c th c s dng vi nhng biu thc s. Tr li lch tiu chun cho tt c nhng gi tr. Tr li lch tiu chun cho tp hp ca tt c nhng gi tr. Tr li s chnh lch cho tt c nhng gi tr. Tr li s chnh lch cho tp hp ca tt c nhng gi tr.

Chng ta hy xem xt nhng v d s dng mt s nhng hm tng th. Bn s dng hm AVG() c tr bnh qun. Chng hn, pht biu sau y ly tr trung bnh ca ct UnitPrice ca bng nhng sn phm s dng hm AVG() : SELECT AVG(UnitPrice) FROM Products; V d ny tr v 28,8663. V ALL l mc nh c dng vi nhng hm, v d ny s dng mi hng trong bng nhng sn phm khi thc hin s tnh ton. Nu bn mun ch s dng nhng gi tr duy nht trong s tnh ton, th bn s dng ty chn DISTINCT, nh v d sau y SELECT AVG(DISTINCT UnitPrice) FROM Products;

V d ny tr li 31,4162, hi cao hn so vi kt qu trc y bi v ch nhng gi tr duy nht (khng trng lp) trong ct c s dng trong ln ny. Ngoi vic gi mt ct ti mt hm, bn c th cng gi qua mt trng c tnh ton. Chng hn, pht biu sau y gi qua trng c tnh ton UnitPrice* 1.20 ti hm AVG() : SELECT AVG(UnitPrice * 1.20) FROM Products; V d ny tr li 34,639,636; tr trung bnh sau khi nhng gi tr UnitPrice c tng 20 phn trm. Bn c th gii hn nhng hng c chuyn cho mt hm s dng mt mnh WHERE . Chng hn, pht biu SELECT sau y tnh ton tr trung bnh ca UnitPrice cho nhng hng vi mt CategoryID l 1 SELECT AVG(UnitPrice) FROM Products WHERE CategoryID = 1; V d ny tr v 37.9791. Bn c th kt hp mt hm vi mt mnh GROUP BY thc hin mt tnh ton trn mi nhm ca nhng hng. Chng hn, pht biu SELECT sau y tnh ton tr trung bnh ca ct UnitPrice cho mi khi ca nhng hng c nhm li bi CategoryID: SELECT AVG(UnitPrice) FROM Products GROUP BY CategoryID; Hnh 4.2 cho thy nhng kt qu ca pht biu SELECT ny.

Hnh 4.2: S dng hm AVG() tnh ton tr bnh qun ca ct UnitPrice Bn cng c th cung cp mt mnh HAVING hn ch nhng nhm c dng trong mt pht biu SELECT. V d, pht biu sau y thm mt mnh HAVING vo v d trc trch ra nhng nhm c tr trung bnh ln hn 50: SELECT AVG(UnitPrice) FROM Products GROUP BY CategoryID HAVING AVG(UnitPrice) > 50; V d ny tr li 54.0066.

Chng ta hy xem xt ti mt s nhng hm tng th khc. Bn ly tng s lng hng s dng hm COUNT() . Chng hn, pht biu sau y ly tng s lng hng trong bng nhng sn phm s dng hm COUNT(): SELECT COUNT(*) FROM Products; V d ny tr li 77. Bn s dng nhng hm MAX() v MIN() ly nhng gi tr cc i v cc tiu. Chng hn, pht biu sau y s dng nhng hm ny ly gi tr cc i v cc tiu ca ct UnitPrice: SELECT MAX(UnitPrice), MIN(UnitPrice) FROM Products; V d ny tr li 263.5000 v 2.5000 cho nhng gi tr cc i v cc tiu tng ng. Bn s dng hm SUM() ly tng s ca bt k gi tr khng null no. Chng hn, pht biu sau y ly tng ca nhng gi tr ct UnitPrice cho mi nhm ca nhng hng s dng hm SUM(). SELECT SupplierID, SUM(UnitPrice) AS SumUnitPrice FROM Products GROUP BY SupplierID; Mnh GROUP BY ca v d ny tr v mt hng cho mi nhm ca nhng hng c nhng gi tr ct SupplierID ging nhau. Hm SUM() tnh tng nhng gi tr ct UnitPrice cho tt c nhng hng bn trong mi nhm v tr v mt gi tr n. Chng hn, SUM() tr v 47.0000 cho nhm c SupplierID l 1. y l tng ca nhng gi tr ct UnitPrice cho tt c nhng hng c SupplierID l 1. Tng t, SUM() tr li 81.4000 ni SupplierID l 2, vn vn. Mnh AS trong v d ny gn tn cho nhng kt qu c tr v bi hm SUM() nh mt ct mi c tn SumUnitPrice. Hnh 4.3 cho thy nhng kt qu ca pht biu SELECT ny.

Hnh 4.3: s dng gm SUM() tnh ton tng s ca ct UnitPrice

S dng nhng hm Ton hc


Nhng hm ton hc cho php bn thc hin nhng thao tc s, nh vic ly gi tr tuyt i ca mt s.

Bng 4.4 lit k nhng hm ton hc sn c trong SQL Server. Biu thc bn c th chuyn cho nhng hm ton hc in hnh l mt ct n hay gi tr, nhng n cng c th l mt trng c tnh ton. Bng 4.4: nhng hm Ton hc
HM ABS(expression) ACOS(expression) ASIN(expression) ATAN(expression) ATN2(expression1, expression2) CEILING(expression) COS(expression) COT(expression) DEGREES(expression) EXP(expression) FLOOR(expression) LOG(expression) LOG10(expression) PI() POWER(expression, y) RADIANS(expression) RAND([expression]) M T Tr li gi tr tuyt i ca biu thc. n lun lun l mt s dng. Tr li arccosine ca biu thc. Tr li arcsine ca biu thc. Tr li arctangent ca biu thc. Tr li arctangent ca gc gia biu thc1 v biu thc2. Tr li s nguyn nh nht ln hn hay bng biu thc. Tr li cosin ca biu thc. Tr li c tang ca biu thc. Chuyn i gc c tnh theo radian ti mt gc tnh theo . Tr li gi tr s m ca biu thc. Tr li s nguyn ln nht t hn hay bng biu thc. Tr li lga t nhin ca biu thc. Tr li lga c s 10 ca biu thc. Tr li hng s ton hc Pi. Tr li gi tr ca biu thc c nng ln ly tha Y. Chuyn i gc c cung cp tnh bng ti mt gc tnh theo radian. Tr li mt s du chm ng ngu nhin gia 0 v 1. Biu thc l mt gi tr khi u m bn c th dng pht sinh s ngu nhin. Tr li gi tr ca biu thc c lm trn hay ct b phn thp phn c ch nh bi length ( di). Ty chn function c s dng ch nh kiu thao tc thc hin: 0 (mc nh) lm trn s, v nhng gi tr khc l ct b s. Tr li 1, 0, hay-1 ph thuc vo du ca biu thc. Tr li 1 cho mt s dng ,0 cho ch s khng, hay-1 cho mt s m. Tr li sin ca biu thc. Tr li tr bnh phng ca biu thc. Tr li cn bc hai ca biu thc. Tr lai tang ca biu thc.

ROUND(expression, length [, function])

SIGN(expression)

SIN(expression) SQUARE(expression) SQRT(expression) TAN(expression)

Chng ta hy xem xt nhng v d s dng mt s nhng hm ton hc. Bn s dng nhng hm ABS() ly gi tr tuyt i. V d sau y tr li 10 v 15: SELECT ABS(-10), ABS(15); Bn s dng nhng hm ACOS(), ASIN(), v ATAN() ly arccosine, arcsine, v Arctangent ca mt s. V d sau y tr li 0.0, 1.5707963267948966, v 0.78539816339744828: SELECT ACOS(1), ASIN(1), ATAN(1); Bn s dng hm CEILING() ly s nguyn nh nht ln hn hay bng vi gi tr c chuyn cho hm. V d sau y tr li 2 v-1 SELECT CEILING(1.4), CEILING(-1.4); Bn s dng hm FLOOR() ly s nguyn ln nht nh hn hay bng vi gi tr chuyn cho hm. V d sau y tr li 1 v-2 SELECT FLOOR(1.4), FLOOR(-1.4); Bn s dng PI() ly hng s Pi ton hc. V d sau y tr li 3.1415926535897931 SELECT PI(); Bn s dng hm POWER() ly gi tr ca mt s nng ln vi mt ly tha ch nh. V d sau y tr li 8 SELECT POWER(2, 3); /* ( 23 = 8 ) */ Bn s dng hm ROUND() ly gi tr ca mt s c lm trn hay ct b ti mt chiu di c ch nh. V d sau y tr li 1.23500, l t s 1.23456 c lm trn ti ba ch s thp phn SELECT ROUND(1.23456, 3); V d k tip gi qua mt s khc khng nh tham s th ba n hm ROUND(), n ch nh con s s c ct, thay v lm trn nh c lm trong v d trc y: SELECT ROUND(1.23456, 3, 1); V d ny tr li 1.23400, l t s 1.23456 c ct b sau ba ch s thp phn. Bn s dng hm SQUARE() ly bnh phng ca mt s. V d sau y tr li 16.0 SELECT SQUARE(4); Bn s dng hm SQRT() ly cn bc hai ca mt s . V d sau y tr li 4.0 SELECT SQRT(16);

S dng nhng hm chui


Nhng hm chui cho php bn thao tc nhng chui. Chng hn, bn c th thay th nhng k t ch nh trong mt chui. Bng 4.5 lit k nhng hm chui sn c trong SQL Server. Bng 4.5: nhng hm chui HM ASCII(charExpression) CHAR(intExpression) CHARINDEX (charExpression1, charExpression2 [, start ]) DIFFERENCE (charExpression1, charExpression2) M T Tr li m ASCII cho k t u tin bn tri ca biu thc chui char (charExpression). Tr li k t tng ng cho m ASCII c ch r bi intExpression. Tr li v tr ca nhng k t c ch r bi charExpression1 trong charExpression2, bt u ti v tr ty chn c ch r bi start. Tr li s khc nhau gia nhng gi tr SOUNDEX ca hai biu thc k t . Bn s dng m SOUNDEX nh gi s ging nhau v ng m ca hai chui. Gi tr tr v gia 0 v 4; 4 ch bo hai biu thc c ng m ng nht.

LEFT(charExpression, intExpression) LEN(charExpression) LOWER(charExpression) LTRIM(charExpression) NCHAR(intExpression) PATINDEX('%pattern%', charExpression)

Tr li nhng k t mt tri c ch r bi intExprssion (s k t mt tri cn ly) t charExpression (chui k t cn lc). Tr li s lng k t trong charExpression (chui k t). Chuyn i nhng k t trong charExpression thnh nhng k t thng v tr v nhng k t ny. Loi b bt k khong trng no t mt tri ca chui charExpression v tr v nhng k t cn li. Tr li k t Unicode vi m c ch nh bi biu thc s intExpression. Tr li v tr khi u ca ln xut hin u tin ca mu (pattern) c trong chui charExpression. Nu mu khng c tm thy th nhng ch s khng c tr v.

REPLACE (charExpression1, Thay th tt c cc xut hin ca chui con charExpression2 c trong charExpression2, charExpression3) chui m charExpression1 vi chui thay th charExpression3. QUOTENAME ('charString' [ , 'quoteChar' ]) REPLICATE (charExpression, intExpression) REVERSE(charExpression) RIGHT(charExpression, intExpression) RTRIM(charExpression) SOUNDEX(charExpression) SPACE(intExpression) STR(floatExpression [ , length [ , decimal ] ]) Tr li mt chui Unicode vi nhng du phn cch c ch r bi quoteChar c thm vo to cho charString mt nh danh gii hn hp l. Lp li chui charExpression vi s ln c ch nh bi intExpression. o ngc trt t ca nhng k t trong chui charExpression v tr v nhng k t . Tr li nhng k t mt bn phi ca chui charExpression vi s k t trch ra c ch r bi intExprssion . Loi b bt k khong trng no t cui cng bn phi ca chui charExpression v tr v nhng k t cn li. Tr li m SOUNDEX bn k t. Bn s dng m ny nh gi s ging nhau v ng m ca hai chui. Tr li mt chui ca nhng khong cch c lp li vi tng s ln c ch r bi intExpression. Chuyn i con s c ch r bi floatExpression thnh nhng k t ; length ch r s lng k t m bn mun nhn thy (bao gm nhng ch s v nhng khang cch , du dng hay du tr v du phy s thp phn thm vo); s thp phn ch r s lng ch s bn phi ca du phy s thp phn. S c lm trn nu cn thit. Xa nhng k t t chui charExpression1, bt u ti v tr c ch nh bi start vi mt tng s k t cn xa length , v ri chn nhng k t ch r bi charExpression2. Tr li b phn biu thc ca mt k t , nh phn,vn bn, hay nh.

STUFF (charExpression1, start, length, charExpression2) SUBSTRING(expression, start, length)

UNICODE('nCharExpression') UPPER(charExpression)

Tr li gi tr Unicode cho k t u tin ca biu thc nCharExpression -nchar hay nvarchar . Chuyn i nhng k t trong chui charExpression thnh ch hoa v tr li nhng k t .

Chng ta hy xem xt nhng v d m s dng mt s nhng hm chui. Bn s dng hm ASCII() ly m ASCII cho k t mt tri ca biu thc k t c cung cp. V d sau y tr li 65 v 97 SELECT ASCII('A'), ASCII('a'); Bn s dng hm CHAR() ly k t tng ng ti m ASCII ca biu thc s nguyn c cung cp. V d sau y tr li A v a : SELECT CHAR(65), CHAR(97); Bn s dng hm CHARINDEX() ly v tr ca nhng k t . V d sau y tr li 16, n l v tr khi u ca t ten : SELECT CHARINDEX('ten', 'Four-score and ten years'); Ch thch : k t u tin ca chui c v tr 1, 16 lv tr ca k t t tnh t k t u tin ca chui bao gm c du cch. Bn s dng hm DIFFERENCE() thu c s khc nhau gia nhng gi tr SOUNDEX ca hai biu thc k t . V d sau y tr li 4, cho bit Browne v 'Browne' c ng m ng nht SELECT DIFFERENCE('Brown', 'Browne'); Bn s dng hm LEFT() thu c nhng k t mt tri ca mt biu thc k t. V d sau tr li "Fourscore", l 10 k t mt tri ca chui "Four-score and ten years": SELECT LEFT('Four-score and ten years', 10); Bn s dng hm RIGHT() thu c nhng k t mt bn phi ca mt biu thc k t . V d sau y tr li "year", l nm k t mt bn phi ca chui "Four-score and ten years": SELECT RIGHT('Four-score and ten years', 5); Bn s dng hm LEN() thu c con s cho bit tng s k t (k c nhng k t c bit v du cch) c trong mt biu thc k t . V d sau y tr li 24: SELECT LEN('Four-score and ten years'); Bn s dng hm LOWER() thu c phin bn ch thng ca mt biu thc k t . V d sau y tr li "four-score and ten years": SELECT LOWER('FOUR-SCORE AND TEN YEARS'); Bn s dng hm UPER() thu c phin bn ch hoa ca mt biu thc k t . V d sau y tr li "FOUR-SCORE AND TEN YEARS": SELECT UPPER('four-score and ten years'); Bn s dng hm LTRIM() v RTRIM() loi b bt k khang trng no v bn tri v bn phi ca mt biu thc k t . V d sau y tr li "FOUR-SCORE" v "AND TEN YEARS" (khong trng b loi b): SELECT LTRIM(' FOUR-SCORE'), RTRIM('AND TEN YEARS '); Bn s dng hm STR() chuyn i mt gi tr s ti mt chui c cha nhng ch s. Tham s u tin l s chuyn i, tham s th hai l tng s lng k t bn mun c trong chui ca bn, v tham s th ba l s lng ch s sau du phy s thp phn. V d sau y tr li 123.46 SELECT STR(123.456, 6, 2); S 123.456 c chuyn i ti mt chui gm su k t , vi hai ch s sau du phy s thp phn, v c lm trn.

Bn s dng hm STUFF() thay th nhng k t . Tham s u tin l chui bn mun thay th nhng k t trong , tham s th hai l v tr k t bt u c thay th, tham s th ba l tng s lng k t c thay tnh t k t bt u thay , v tham s th t l tp hp nhng k t thay vo. V d sau y tr li "Fivescore and ten": SELECT STUFF('Four-score and ten', 1, 4, 'Five'); Bn s dng hm SUBSTRING() ly mt phn ca mt chui. Tham s u tin l chui, tham s th hai l v tr bt u ly ra, v tham s th ba l tng s lng k t cn ly tnh t v tr bt u . V d sau y tr li Four: SELECT SUBSTRING('Four-score and ten', 1, 4); Bn s dng hm UNICODE() thu c gi tr Unicode cho k t u tin. V d sau y tr li 65 v 97 SELECT UNICODE('A'), UNICODE('a');

S dng nhng hm ngy thng v thi gian


Nhng hm ngy thng v thi gian cho php bn thao tc vi ngy thng v thi gian. Chng hn, bn c th thm mt s ngy vo mt ngy thng cho. Bng 4.6 lit k ngy thng v nhng chc nng thi gian sn c trong SQL Server. Bng 4.6: nhng hm ngy thng v thi gian HM DATEADD(interval, number, date) M T Tr li mt ngy thng (datetime) l kt qu ca vic thm s lng (number) ch nh ca n v khong thi gian (interval) vo ngy thng (date). Nhng khong thi gian hp l bao gm : nm, qu, thng ,dayofyear, ngy, tun, gi, pht, giy, v mili-giy (year, quarter, month, dayofyear, day, week, hour, minute, second, and millisecond). Tr li s chnh lch gia startDate v endDate, vi s chnh lch c tnh ton theo nhng n v khong thi gian (interval) nh (nm, qu vn vn). Tr li mt chui k t i din cho tn ca khong thi gian (interval) ca ngy thng (date). Tr li mt s nguyn i din cho khong thi gian (interval) ca ngy thng (date). Tr li mt s nguyn m i din cho ngy ca ngy thng (date). Tr li mt ngy thng (datetime) cha ngy thng h thng hin thi. Tr li mt ngy thng (datetime) cha ngy thng h thng hin thi theo thi gian UTC (Ta gi quc t hay gi Greenwich). Gi UTC c bt ngun t gi a phng hin thi v s thit t h thng thi gian khu vc. Tr li mt s nguyn i din cho thng ca ngy thng (date). Tr li mt s nguyn i din cho nm ca ngy thng (date) .

DATEDIFF (interval, startDate, endDate) DATENAME(interval, date) DATEPART(interval, date) DAY(date) GETDATE() GETUTCDATE()

MONTH(date) YEAR(date)

Chng ta hy xem xt nhng v d s dng mt s hm ngy thng v thi gian. Bn s dng hm DATEADD() thm mt s khong thi gian (intervals) vo mt ngy thng. V d sau y thm hai ngy ti ngy thng 12/ 20/ 2003 v tr v 2003-12-22 00: 00: 00.000 SELECT DATEADD(day, 2, '12/20/2003');

Bn s dng hm DATEDIFF() thu c s chnh lch gia hai ngy thng. V d sau y thu c s chnh lch (tnh theo ngy) gia ngy 12/ 20/ 2003 v ngy 12/ 22/ 2003 v tr v 2 ngy SELECT DATEDIFF(day, '12/20/2003', '12/22/2003'); Bn s dng hm DATENAME() thu c mt chui k t i din cho phn t ca mt ngy thng. V d sau y ly tn thng ca 12/ 20/ 2003 v December (thng mi hai) c tr v. SELECT DATENAME(month, '12/20/2003'); Bn s dng phng thc DATEPART() thu c mt s nguyn i din cho mt phn t ca mt ngy thng . V d sau y ly s thng ca 12/ 20/ 2003 v tr li 12 SELECT DATEPART(month, '12/20/2003'); Bn s dng hm DAY() thu c mt s nguyn i din cho mt phn t ca mt ngy thng . V d sau y ly s ngy ca 12/ 20/ 2003 v tr li 20 SELECT DAY('12/20/2003'); Bn s dng hm MONTH() thu c mt s nguyn i din cho mt phn t ca mt ngy thng . V d sau y ly s thng ca 12/ 20/ 2003 v tr li 12 SELECT MONTH('12/20/2003'); Bn s dng hm YEAR() thu c mt s nguyn i din cho mt phn t ca mt ngy thng . V d sau y ly s nm ca 12/ 20/ 2003 v tr li 2003 SELECT YEAR('12/20/2003'); Bn s dng hm GETDATE() thu c ngy thng h thng hin thi. V d sau y tr li 2002-07-16 12: 59: 50.823 (ngy hm nay) SELECT GETDATE(); Bn s dng hm GETUTCDATE() thu c ngy thng h thng hin thi vi thi gian UTC (gi quc t). V d sau y tr li 2002-07-16 20: 02: 18.123 (gi quc t hm nay) SELECT GETUTCDATE();

S dng nhng hm H thng


Nhng hm h thng cho php bn thao tc v ly nhng thng tin v nhng gi tr, nhng i tng v nhng thit nh trong SQL Server. Chng hn, bn c th chuyn i mt gi tr trong mt kiu ti kiu khc. Bng 4.7 lt k mt s hm h thng sn c trong SQL Server. Bng 4.7: nhng hm H thng TN HM M T

CONVERT(dataType expression Chuyn i gi tr trong biu thc (expression) ti kiu ch r bi [, style [(length )], ]) dataType. Nu bn ang chuyn i mt kiu nchar, nvarchar, char, varchar, nh phn, hay kiu varbinary , bn cng c th ch r mt ty chn length , n ch nh chiu di ca gi tr mi. Bn c th s dng ty chn style (kiu). Chuyn i d liu datetime hay smalldatetime ti d liu k t; style l nh dng cho ngy thng v thi gian. Chuyn i d liu float, real, money, or smallmoney ti d liu k t ; style l nh dng chui cho con s. Bn c th tm xem nhng chi tit cho ty chn style trong nhng ti liu sch trc tuyn Ngi phc v SQL. COALESCE(expression1 [ , ... expressionN]) Tr v biu thc khng null u tin trong danh sch ca nhng biu thc.

DATALENGTH(expression). @@ERROR @@IDENTITY ISDATE(expression) ISNULL(expression, replacementValue) ISNUMERIC(expression). NEWID() NULLIF(expression1, expression2) @@ROWCOUNT @@TRANCOUNT

Tr li s bytes c dng trnh by biu thc. Tr li s c trng ca li cho pht biu T- SQL cui cng m c thc hin. Tr li gi tr nhn dng c chn vo sau cng . Tr li 1 khi biu thc l mt ngy thng hp l, nu khng s 0 c tr li. Nu biu thc c gi tri null, th replacementValue c tr li, cch khc biu thc c tr li. Tr li 1 khi biu thc l mt s hp l, cch khc 0 c tr li. Tr li mt gi tr duy nht ca kiu uniqueidentifier. Tr li mt gi tr null nu expression1 bng expression2. Tr li s lng hng c nh hng bi cu lnh T- SQL c thc hin sau cng. Tr li s lng giao dch hat ng cho kt ni hin thi (currentconnection) ti c s d liu.

Chng ta hy xem xt nhng v d s dng mt s nhng hm h thng. Bn s dng hm CONVERT() chuyn i mt gi tr t kiu ny sang kiu khc. V d sau y chuyn i s 123.456 ti mt nvarchar ,v 123.456 c tr li SELECT CONVERT(nvarchar, 123.456); Bn s dng hm COALESCE() thu c biu thc khng null u tin trong mt danh sch. V d sau y tr li 123.456 SELECT COALESCE(null, null, 123.456, null); Bn s dng hm DATALENGTH() thu c s bytes c s dng trnh by mt biu thc. V d sau y trnh by s bytes dng trnh by gi tr ct gi trong ct CompanyName ca bng nhng khch hng cho hng c CustomerID bng ALFKI: SELECT DATALENGTH(CompanyName), CompanyName FROM Customers WHERE CustomerID = 'ALFKI'; V d ny tr li 38 v Alfreds Futterkiste, cha 19 k t. mi k t c cha trong 2 bai, v chui 19-k t gi ti 38 bai (2* 19). Bn s dng hm ISDATE() xc nh phi chng mt biu thc l mt ngy thng hp l. ISDATE() tr v 1 khi biu thc l mt ngy thng hp l, cch khc n tr li 0. V d sau y tr li 1 v 0 SELECT ISDATE('12/20/2004'), ISDATE(1234); Bn s dng hm ISNUMERIC() xc nh phi chng mt biu thc l mt s hp l. V d sau y tr li 1 v 0 SELECT ISNUMERIC(1234), ISNUMERIC('abc'); Bn s dng hm ISNULL() thay th mt gi tr null vi gi tr khc. V d sau y tr li 10 v 20 SELECT ISNULL(null, 10), ISNULL(20, 10); 10 20

To ra nhng hm do ngi dng nh ngha


Bn c th to ra nhng hm ngi dng nh ngha ca ring mnh trong SQL Server. Chng hn, bn c th mun to ra hm ca ring mnh tnh ton gi chit khu t mt gi gc v h s nhn vi gi ny . Bn to ra mt hm s dng pht biu CREATE FUNCTION. C ba kiu hm ngi dng nh ngha: Scalar functions: (nhng hm v hng) tr li mt gi tr n. Gi tr tr v c th thuc bt k kiu d liu no ngoi tr text, ntext, image (nh), cursor (con tr), table, timestamp, v nhng kiu d liu do ngi dng nh ngha. Inline table-valued functions: (nhng hm nh tr bng ni tuyn ) tr v mt i tng kiu bng . Bn c th hiu mt bng nh mt bng c s d liu bnh thng, ngoi tr n c ct gi trong b nh. Mt "hm nh tr bng ni tuyn" c th tr v nhng kt qu c truy xut bi ch mt pht biu SELECT n. Multistatement table-valued functions (nhng hm nh tr bng nhiu pht biu): tr v mt i tng kiu bng. Khng ging mt Inline table-valued function, mt Multistatement table-valued function c th cha nhiu pht biu T- SQL. Bn s xem nhng v d ca ba kiu hm ny trong nhng mc sau y.

S dng nhng hm v hng


Nhng hm v hng tr li mt gi tr n. Danh sch 4.2 trnh by script DiscountPrice.sql n to ra hm DiscountPrice(), hm ny tr v gi chit khu = gi gc ca mt mn c nhn vi mt h s chit khu. Nhng gi tr ny c gi qua nh nhng tham s ti hm DiscountPrice() . Bn c th ti file ny vo Query Analyzer v chy n. Danh sch 4.2: DISCOUNTPRICE.SQL /* DiscountPrice.sql creates a scalar function to return the new price of an item given the original price and a discount factor */ CREATE FUNCTION DiscountPrice(@OriginalPrice money, @Discount float) RETURNS money AS BEGIN RETURN @OriginalPrice * @Discount END Nhng tham s gi ti hm c t trong cp du mc sau tn ca hm trong pht biu CREATE FUNCTION . Cnh bo: Bo m l bn chn c s d liu Northwind t hp danh sch x xung trn thanh cng c Query Analyzer trc khi chy script. Bng cch ny, hm s c to ra trong c s d liu Northwind. Bn cng c th to ra nhng hm s dng Enterprise Manager. Bn lm iu ny bi kch chut phi trn node "User Defined Functions" trong th mc Databases . Ri bn c th ct v dn ni dung ca DiscountPrice.sql vo trong hp thoi Enterprise Manager properties, nh c trnh by trong Hnh 4.4.

Hnh 4.4: S dng Enterprise Manager nh ngha mt hm Bn c th xem v sa i mt hm bi nhn p tn hm trong Enterprise Manager. Bn cng c th xa mt hm s dng Enterprise Manager. Object Browser (B duyt i tng) ca Query Analyzer (trnh phn tch truy vn) cn cho php bn xem, sa i, v xa nhng hm na. Mo nh: Bn cng c th xa mt hm s dng pht biu DROP FUNCTION , v Bn c th sa i mt hm s dng pht biu ALTER FUNCTION. Mt khi bn to ra hm , bn c th gi n. Khi gi mt hm v hng , bn s dng c php sau y: owner.functionName Vi owner l ngi s dng c s d liu -ngi s hu hm , v functionName l tn ca hm. Cho l bn to ra hm DiscountPrice() s dng ngi s dng dbo, th bn gi hm ny s dng c php : dbo.DiscountPrice(). V d sau y tr v 3.0000, tc l 10* 0.3 : SELECT dbo.DiscountPrice(10, 0.3); Nh vi bt k hm no khc, bn c th gi mt ct ti DiscountPrice(). V d sau y tr li 5.4000 v 18.0000; 5.4000 = 18.0000* 0.3 SELECT dbo.DiscountPrice(UnitPrice, 0.3), UnitPrice FROM Products WHERE ProductID = 1; Tt nhin bn cng c th gi nhng bin nh nhng tham s ti mt hm . nh trc y, v d ny tr li 5.4000 v 18.0000 DECLARE @MyDiscountFactor float SET @MyDiscountFactor = 0.3 SELECT dbo.DiscountPrice(UnitPrice, @MyDiscountFactor), UnitPrice FROM Products WHERE ProductID = 1;

S dng nhng hm nh tr bng ni tuyn


Mt hm nh tr bng ni tuyn (inline table-valued function) tr v mt i tng kiu bng, c c tr - s dng mt pht biu SELECT n. Khng ging mt hm v hng (scalar function), mt hm nh tr bng ni

tuyn khng cha ng mt thn ca nhng pht biu c t bn trong nhng pht biu BEGIN v END . Thay vo , ch mt pht biu SELECT n c t bn trong hm. Chng hn, Danh sch 4.3 trnh by script "ProductsToBeReordered.sql" n to ra hm ProductsToBeReordered(). hm ny tr v mt bng cha nhng hng t bng nhng sn phm vi mt gi tr ct UnitsInStock nh hn hay bng vi tham s mc "reorder" gi n cho hm. Danh sch 4.3: PRODUCTSTOBEREORDERED.SQL /* ProductsToBeReordered.sql creates an inline table-valued function to return the rows from the Products table whose UnitsInStock column is less than or equal to the reorder level passed as a parameter to the function */ CREATE FUNCTION ProductsToBeReordered(@ReorderLevel int) RETURNS table AS RETURN ( SELECT * FROM Products WHERE UnitsInStock <= @ReorderLevel ) Khng ging mt hm v hng, bn khng phi thm owner (tn ti khan ngi dng) khi s gi mt hm "inline table-valued function". Bn s dng mt pht biu SELECT c bng c tr v bi hm nh mi bng khc. Chng hn, pht biu SELECT sau y trnh by tt c nhng hng v nhng ct c tr v bi gi hm ProductsToBeReordered(10): SELECT * FROM ProductsToBeReordered(10); Tt nhin bn cng c th trnh by ch nhng ct v nhng hng c la chn t bng c tr v bi mt hm "inline table-valued function". Chng hn: SELECT ProductID, ProductName, UnitsInStock FROM ProductsToBeReordered(10) WHERE ProductID <= 50; Hnh 4.5 cho thy nhng kt qu ca pht biu SELECT ny.

Hnh 4.5: s dng mt hm nh tr bng ni tuyn

S dng nhng hm nh tr bng a pht biu


Nhng hm nh tr bng a pht biu (Multistatement table-valued functions) tr li mt i tng kiu bng. Khng ging mt hm nh tr bng ni tuyn (inline table-valued function), mt hm nh tr bng a pht biu c th cha nhiu cu lnh T- SQL, v cho php bn xy dng nhng hm phc tp. Chng hn, Danh sch 4.4 trnh by script "ProductsToBeReordered2.sql" to ra hm ProductsToBeReordered2() . Hm ny tr v mt bng cha nhng ct ProductID, ProductName, v UnitsInStock t bng nhng sn phm (Products) vi mt gi tr ct UnitsInStock nh hn hay bng vi tham s mc "reorder". Ngoi ra, mt ct mi tn Reorder c thm vo bng, cha t YES hay NO, ty thuc vo sn phm c c t mua b xung (reorder) hay khng. Danh sch 4.4: PRODUCTSTOBEREORDERED2. SQL /* ProductsToBeReordered2 .sql to ra mt hm nh tr bng ni tuyn m tr v nhng hng t bng nhng sn phm c ct UnitsInStock nh hn hay bng vi mc phi t mua b xung c gi qua nh mt tham s ti hm */ CREATE FUNCTION ProductsToBeReordered2(@ReorderLevel int) RETURNS @MyProducts table ( ProductID int, ProductName nvarchar(40), UnitsInStock smallint, Reorder nvarchar(3) ) AS BEGIN -- truy xut nhng hng t bng Products v -- v chn chng vo bng MyProducts,

-- thit t ct Reorder ti 'No' INSERT INTO @MyProducts SELECT ProductID, ProductName, UnitsInStock, 'No' FROM Products; -- cp nht bng MyProducts, thit t ct -- Reorder ti 'Yes' khi ct UnitsInStock -- nh hn hay bng @ReorderLevel UPDATE @MyProducts SET Reorder = 'Yes' WHERE UnitsInStock <= @ReorderLevel RETURN END nh vi mt hm nh tr bng ni tuyn, bn khng phi thm owner (tn ti khon ngi dng) khi gi mt hm nh tr bng ni tuyn. Bn s dng mt pht biu SELECT c bng c tr v bi hm nh mi bng c s d liu bnh thng khc. Chng hn, pht biu SELECT sau y trnh by tt c nhng hng v nhng ct c tr v bi gi hm ProductsToBeReordered2(20): SELECT * FROM ProductsToBeReordered2(20); Hnh 4.6 cho thy nhng kt qu ca pht biu SELECT ny.

Hnh 4.6: s dng mt hm multistatement table-valued function Trong mc k tip, bn s hc s dng nhng th tc lu tr nh th no.

Gii thiuv nhng th tc lu tr


SQL Server cho php bn lu tr nhng th tc trong mt c s d liu. Nhng th tc lu tr khc vi nhng hm do ngi dng nh ngha trong nhng th tc ny c th tr v mt mng rng ln ca nhng kiu d liu.

Bn in hnh s to ra mt th tc lu tr khi bn cn thc hin mt tc v m s dng cch mnh m c s d liu, hay bn mun tp trung m trong c s d liu m bt k ngi s dng no cng c th gi thay v mi ngi s dng phi vit chng trnh ring ca mnh thc hin nhim v ging nh vy. Mt v d v s dng c s d liu mnh l mt ng dng ngn hng m bn cn cp nht nhng ti khon vo cui mi ngy. Mt v d v khi no bn cn s dng m tp trung l khi bn mun hn ch nhng ngi s dng truy nhp ti nhng bng c s d liu: bn c th mun nhng ngi s dng c kh nng thm mt hng vo mt bng ch thng qua mt th tc lu tr khng sy ra nhng li thc thi. Trong mc ny, bn s hc cch to ra mt th tc lu tr trong c s d liu Northwind v n c chy nh th no s dng cng c Query Analyzer .

To ra mt Th tc lu tr
Th tc bn s thy trong mc ny c tn AddProduct(). Th tc ny thm mt hng vo bng nhng sn phm, gn nhng gi tr ct cho hng mi vi nhng gi tr c gi qua nh nhng tham s ti th tc. Ct ProductID cho hng mi c gn mt gi tr mt cch t ng bi c s d liu thng qua vic s dng mt identity c thit lp khi bng lc thot tin c to . Gi tr identity ny c th c c s dng hm @@IDENTITY sau khi hng mi c thm vo bng. Th tc lu tr AddProduct() bn s thy y tr v gi tr identity ny cho pht biu gi hm. Bn to ra mt th tc s dng pht biu CREATE PROCEDURE , v Danh sch 4.5 cho thy script "AddProduct.sql" to ra th tc lu tr AddProduct() . Danh sch 4.5: ADDPRODUCT.SQL /* AddProduct.sql to ra mt that adds a row to the Products table using values passed as parameters to the procedure. The procedure returns the ProductID of the new row. */ CREATE PROCEDURE AddProduct @MyProductName nvarchar(40), @MySupplierID int, @MyCategoryID int, @MyQuantityPerUnit nvarchar(20), @MyUnitPrice money, @MyUnitsInStock smallint, @MyUnitsOnOrder smallint, @MyReorderLevel smallint, @MyDiscontinued bit AS DECLARE @ProductID int -- insert a row into the Products table INSERT INTO Products ( ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued ) VALUES ( @MyProductName, @MySupplierID, @MyCategoryID, @MyQuantityPerUnit, @MyUnitPrice, @MyUnitsInStock, @MyUnitsOnOrder, @MyReorderLevel, @MyDiscontinued )

-- use the @@IDENTITY function to get the last inserted -- identity value, which in this case is the ProductID of -- the new row in the Products table SET @ProductID = @@IDENTITY -- return the ProductID RETURN @ProductID Bn cng c th to ra nhng th tc s dng Enterprise Manager (b qun l doanh nghip). Bn lm iu ny bi kch chut phi, nt trn node "Stored Procedures" (th tc lu tr) trong th mc Databases (nhng c s d liu) v chn New Stored Procedure (Th tc lu tr mi). Ri bn c th ct v dn ni dung ca AddProduct.sql vo trong hp thoi Enterprise Manager properties (nhng thuc tnh b qun l doanh nghip), nh c trnh by trong hnh 4.7. Bn ch - Ti c thm mt s ch thch vo don u ca file ny cho bit nhng g th tc thc hin.

Hnh 4.7: S dng B qun l doanh nghip (Enterprise Manager) nh ngha mt th tc

Bn c th xem v sa i mt th tc bi nhn p tn th tc trong Enterprise Manager. Bn cng c th xa mt th tc s dng Enterprise Manager . Object Browser (B duyt i tng) ca Query Analyzer (b phn tch truy vn) cn cho php bn xem, sa i, v xa nhng th tc na. Mo nh: Bn cng c th xa mt th tc s dng lnh DROP PROCEDURE , v bn c th sa i mt Th tc s dng lnh ALTER PROCEDURE . Trong mc k tip, bn s thy cch chy mt th tc lu tr nh th no.

Chy mt Th tc lu tr
Bn chy mt th tc s dng pht biu EXECUTE . Chng hn, nhng pht biu sau y chy th tc AddProduct() : DECLARE @MyProductID int EXECUTE @MyProductID = AddProduct 'Widget', 1, 1, '1 Per box', 5.99, 10, 5, 5, 1 PRINT @MyProductID Vi s thit t ban u ca nhng hng trong bng nhng sn phm, gi tr kha chnh k tip c pht sinh bi SQL Server cho ProductID l 78, l gi tr c trnh by bi v d trc nu bn chy n.

Tt nhin bn cng c th gi nhng bin nh nhng tham s ti mt th tc. V d sau y trnh by 79- l gi tr kha chnh ca ct ProductID tip theo: DECLARE @MyProductID int DECLARE @MyProductName nvarchar(40) DECLARE @MySupplierID int DECLARE @MyCategoryID int DECLARE @MyQuantityPerUnit nvarchar(20) DECLARE @MyUnitPrice money DECLARE @MyUnitsInStock smallint DECLARE @MyUnitsOnOrder smallint DECLARE @MyReorderLevel smallint DECLARE @MyDiscontinued bit SET @MyProductName = 'Wheel' SET @MySupplierID = 2 SET @MyCategoryID = 1 SET @MyQuantityPerUnit = '4 per box' SET @MyUnitPrice = 99.99 SET @MyUnitsInStock = 10 SET @MyUnitsOnOrder = 5 SET @MyReorderLevel = 5 SET @MyDiscontinued = 0 EXECUTE @MyProductID = AddProduct @MyProductName, @MySupplierID, @MyCategoryID, @MyQuantityPerUnit, @MyUnitPrice, @MyUnitsInStock, @MyUnitsOnOrder, @MyReorderLevel, @MyDiscontinued PRINT @MyProductID

Gii thiu v nhng triggers


Mt trigger c s d liu (a database trigger) l mt kiu c bit ca th tc lu tr, n c chy t ng bi c s d liu- hay theo nhng thut ng trig, c khai ha- sau khi mt pht biu chn , cp nht hay xa ch nh chy tip cn mt bng c s d liu c ch r. Nhng trig rt hu ch thc hin nhng th nh kim nh nhng s thay i c thc hin ti nhng gi tr ct trong mt bng. Mt trig cng c th khi chy thay cho mt INSERT, UPDATE, hay DELETE. Chng hn, thay v thc hin mt INSERT thm mt hng vo bng nhng sn phm, mt trig c th nm ra mt li nu mt sn phm vi cng mt ProductID tn ti trong bng. Nh cp, nhng trig rt hu ch cho s kim nh nhng s thay i lm ti nhng gi tr ct . Trong mc ny, bn s xem xt mt v d mt trig m s kim nh nhng thay i c thc hin ti bng nhng sn phm. ng thi, khi mt pht biu cp nht sa i ct UnitPrice ca mt hng trong bng nhng sn phm, mt hng s c thm vo bng ProductAudit. Cui cng, Khi mt pht biu xa loi b mt hng t bng nhng sn phm, mt hng s c thm vo bng ProductAudit. Trc khi bn xem nhng trig, bn s cn to ra bng ProductAudit. Danh sch 4.6 trnh by mt script "ProductAudit.sql" m to ra bng ProductAudit. Danh sch 4.6: PRODUCTAUDIT.SQL

/* ProductAudit.sql creates a table that is used to store the results of triggers that audit modifications to the Products table */ USE Northwind CREATE TABLE ProductAudit ( ID int IDENTITY(1, 1) PRIMARY KEY, Action nvarchar(100) NOT NULL, PerformedBy nvarchar(15) NOT NULL DEFAULT User, TookPlace datetime NOT NULL DEFAULT GetDate() ) Mnh IDENTITY to ra mt m kha cho ct kha chnh ID ca bng ProductAudit. Mt m kha t ng pht sinh nhng gi tr cho mt ct. M kha cho ct ID bt u vi gi tr 1, n c tng thm 1 sau mi ln INSERT. Ct Action lu tr mt chui ghi hot ng thc hin, chng hn,' Sn phm b sung vi ProductID l 80'. Ct PerformedBy lu gi tn ca ngi dng thc hin hnh ng; y l mc nh vi User (Ngi dng), n tr v Ngi dng hin thi. Ct TookPlace lu gi ngy thng v thi gian khi hnh ng xy ra; y ny mc nh s dng hm GetDate() , n tr v ngy thng v thi gian hin thi. Trong nhng mc sau y, bn s hc cch to v s dng nhng trig sau y nh th no: InsertProductTrigger khi chy sau khi mt pht biu INSERT c thc hin trn bng nhng sn phm. UpdateUnitPriceProductTrigger khi chy sau khi mt pht biu UPDATE c thc hin trn bng nhng sn phm. DeleteProductTrigger khi chy sau khi mt pht biu DELETE c thc hin trn bng nhng sn phm. Trc ht, chng ta hy kho st InsertProductTrigger.

To ra InsertProductTrigger
Bn to ra mt trig s dng pht biu CREATE TRIGGER . Danh sch 4.7 trnh by mt script "InsertProductTrigger.sql" to ra trig InsertProductTrigger, n kim nh s thm nhng hng mi ti bng nhng sn phm. Danh sch 4.7: INSERTPRODUCTTRIGGER.SQL /* InsertProductTrigger.sql creates a trigger that fires after an INSERT statement is performed on the Products table */ CREATE TRIGGER InsertProductTrigger ON Products AFTER INSERT AS -- don't return the number of rows affected SET NOCOUNT ON -- declare an int variable to store the new

-- ProductID DECLARE @NewProductID int -- get the ProductID of the new row that -- was added to the Products table SELECT @NewProductID = ProductID FROM inserted -- add a row to the ProductAudit table INSERT INTO ProductAudit ( Action ) VALUES ( 'Product added with ProductID of ' + CONVERT(nvarchar, @NewProductID) ) C vi th bn cn phi ch v pht biu CREATE TRIGGER ny. Mnh AFTER INSERT ch r trig s khi chy sau khi mt pht biu INSERT c thc hin. SET NOCOUNT ON ngn nga trig tr v s lng hng b nh hng. iu ny ci thin s thc thi ca trig. Bn c th truy xut nhng gi tr ct cho pht biu INSERT m gy cho trig khi chy bi thc hin mt SELECT tip cn bng inserted c bit. Chng hn, bn c th truy xut tt c nhng ct ca mt hng mi b sung s dng SELECT * FROM inserted . M trig truy xut ct ProductID ca hng mi t bng inserted . Pht biu INSERT thm mt hng vo bng ProductAudit cung cp mt gi tr ch cho ct Action . y l v nhng gi tr ct ID, PerformedBy, V TookPlace c gn t ng bi SQL Server. Bn cng c th to ra, son tho, v xa nhng trig -s dng Enterprise Manager. Bn lm iu ny bi kch node Tables trong th mc Databases, ri kick chut phi trn bng Bn mun sa i, v ri chn All Tasks Manage Triggers, . Hnh 4.8 cho thy InsertProductTrigger trong Enterprise Manager. Bn ch -Ti c thm mt s ch thch vo bt u ca m cho bit nhng g m trig lm.

Hnh 4.8: s dng Enterprise Manager xem mt trig B duyt i tng (Object Browser) ca b phn tch truy vn (Query Analyzer) cng cho php bn xem, sa i, v xa nhng trig.

Mo nh: Bn c th xa mt trig s dng pht biu DROP TRIGGER, v Bn c th sa i mt Trig s dng s pht biu ALTER TRIGGER.

Th InsertProductTrigger
th InsertProductTrigger, Bn ch cn thm mt hng vo bng nhng sn phm s dng mt pht biu INSERT. Chng hn: INSERT INTO Products ( ProductName, SupplierID, UnitPrice ) VALUES ( 'Widget', 1, 10 ) Bn c th kim tra InsertProductTrigger khi chy bi vic truy xut nhng hng t bng ProductAudit s dng pht biu SELECT sau : SELECT * FROM ProductAudit Hng c thm vo bng ProductAudit bi InsertProductTrigger nh mt kt qu ca vic thc hin pht biu INSERT trc c a vo Bng 4.8. Bng 4.8: Hng thm vo bng ProductAudit bi InsertProductTrigger ID ACTION PERFORMEDBY TOOKPLACE hnh ng thc hin bi 1 Sn phm c thm vo vi ProductID l 80 dbo 2002-07-18 13:55:12.620

To ra v kim tra UpdateUnitPriceProductTrigger


Trig UpdateUnitPriceProductTrigger khi chy sau khi mt pht biu UPDATE c thc hin trn ct UnitPrice ca bng nhng sn phm. Nu s gim n gi ca mt sn phm ln hn 25 phn trm, th mt hng c thm vo bng ProductAudit kim nh s thay i. Danh sch 4.8 trnh by mt script UpdateUnitPriceProductTrigger.sql. Danh sch 4.8: UPDATEUNITPRICEPRODUCTTRIGGER.SQL /* UpdateUnitPriceProductTrigger.sql creates a trigger that fires after an UPDATE statement is performed on the the UnitPrice column of the Products table. If the reduction of the unit price of a product is greater than 25% then a row is added to the ProductAudit table to audit the change. */ CREATE TRIGGER UpdateUnitPriceProductTrigger ON Products AFTER UPDATE AS -- don't return the number of rows affected

SET NOCOUNT ON -- only run the code if the UnitPrice column -- was modified IF UPDATE(UnitPrice) BEGIN -- declare an int variable to store the -- ProductID DECLARE @MyProductID int -- declare two money variables to store the -- old unit price and the new unit price DECLARE @OldUnitPrice money DECLARE @NewUnitPrice money -- declare a float variable to store the price -- reduction percentage DECLARE @PriceReductionPercentage float -- get the ProductID of the row that -- was modified from the inserted table SELECT @MyProductID = ProductID FROM inserted -- get the old unit price from the deleted table SELECT @OldUnitPrice = UnitPrice FROM deleted WHERE ProductID = @MyProductID -- get the new unit price from the inserted table SELECT @NewUnitPrice = UnitPrice FROM inserted -- calculate the price reduction percentage SET @PriceReductionPercentage = ((@OldUnitPrice -@NewUnitPrice) / @OldUnitPrice) * 100 -- if the price reduction percentage is greater than 25% -- then audit the change by adding a row to the PriceAudit table IF (@PriceReductionPercentage > 25) BEGIN -- add a row to the ProductAudit table INSERT INTO ProductAudit ( Action ) VALUES ( 'UnitPrice of ProductID #' + CONVERT(nvarchar, @MyProductID) + ' was reduced by ' + CONVERT(nvarchar, @PriceReductionPercentage) + '%' ) END END

C mt i iu bn cn phi ch v pht biu CREATE TRIGGER ny. Mnh AFTER UPDATE ch r trig s khi chy sau khi mt pht biu UPDATE c thc hin. Bn c th truy xut nhng gi tr ct c trc khi s Cp nht c p dng t bng b xa, v bn c th truy xut nhng gi tr ct mi sau khi s Cp nht c p dng t bng c chn vo. th UpdateUnitPriceProductTrigger, Bn ch cn gim bt gi tr ca ct UnitPrice cho mt hng trong bng nhng sn phm s dng mt pht biu UPDATE. Chng hn, pht biu UPDATE sau y nhn UnitPrice vi 0.70 cho hng vi ProductID l 80 (iu ny gim bt UnitPrice ca hng ny 30 phn trm) UPDATE Products SET UnitPrice = UnitPrice * 0.70 WHERE ProductID = 80 Hng thm vo bng ProductAudit nh mt kt qu ca vic thc hin pht biu UPDATE ny c trnh by trong Bng 4.9. Hng ny c thm vo bi UpdateUnitPriceProductTrigger. Bng 4.9: Hng thm vo bng ProductAudit bi UpdateUnitPriceProductTrigger ID ACTION (hnh ng) PERFORMEDBY TOOKPLACE (thc hin bi) (thi gian thc hin) 2002-07-18 17:26:37.590

2 n gi ca ProductID #80 c dbo gim 30%

To ra v kim tra DeleteProductTrigger


Trig DeleteProductTrigger khi chy sau khi mt pht biu DELETE c thc hin trn bng nhng sn phm. Trig ny thm mt hng vo bng ProductAudit kim nh s thay i. Danh sch 4.9 trnh by mt script DeleteProductTrigger.sql. Danh sch 4.9: DELETEPRODUCTTRIGGER.SQL /* DeleteProductTrigger.sql creates a trigger that fires after a DELETE statement is performed on the Products table */ CREATE TRIGGER DeleteProductTrigger ON Products AFTER DELETE AS -- don't return the number of rows affected SET NOCOUNT ON -- declare an int variable to store the -- ProductID DECLARE @NewProductID int -- get the ProductID of the row that -- was removed from the Products table SELECT @NewProductID = ProductID FROM deleted -- add a row to the ProductAudit table INSERT INTO ProductAudit (

Action ) VALUES ( 'Product #' + CONVERT(nvarchar, @NewProductID) + ' was removed' ) th DeleteProductTrigger, Bn ch cn loi b mt hng t bng nhng sn phm s dng mt pht biu DELETE . V d, Pht biu DELETE sau loi b hng vi ProductID l 80 DELETE FROM Products WHERE ProductID = 80 Hng c thm vo bng ProductAudit nh mt kt qu ca vic thc hin pht biu DELETE ny nh trong Bng 4.10. Hng ny thm vo bi DeleteProductTrigger. Bng 4.10: Hng thm vo bng ProductAudit bi DeleteProductTrigger ID ACTION (hnh ng) 3 Sn phm #80 b xa PERFORMEDBY (thc hin bi) dbo TOOKPLACE (ngy gi thc hin) 2002-07-18 17:35:53.510

Tm lc
Trong chng ny, bn hc v lp trnh vi Transact- SQL. T- SQL cho php bn vit nhng chng trnh cha nhng cu lnh SQL, cng vi nhng cu trc lp trnh tiu chun nh nhng bin, lgic c iu kin, nhng vng lp, nhng th tc, v nhng hm. SQL Server cung cp mt s hm bn c th s dng ly nhng gi tr t c s d liu. Chng hn, bn c th s dng hm COUNT() ly s lng hng trong mt bng. Bn thy cch s dng nhng hm sau : tng th, ton hc, chui, ngy thng v thi gian, h thng . Bn c th to ra nhng hm do ngi dng nh ngha ca ring mnh trong SQL Server. Chng hn, bn c th mun to ra hm ca ring mnh tnh ton gi chit khu c da trn gi gc v h s nhn vi gi gc ny . SQL Server cho php bn lu gi nhng th tc trong mt c s d liu. Nhng th tc lu tr khc vi nhng hm do ngi dng nh ngha trong nhng th tc c th tr li mt mng rng ln nhng kiu d liu. Bn s in hnh to ra mt th tc lu tr khi cn thc hin mt tc v m s dng cch mnh m c s d liu, hay Bn mun tp trung m trong c s d liu m bt k ngi dng no cng c th gi thay v mi ngi dng phi vit chng trnh ca ring ca mnh thc hin nhng tc v nh nhau. Trong chng k tip, bn s hc v cc lp ADO.NET @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Chng 5: Tng quan v nhng lp ADO.NET Tng quan


ADO.NET cho php bn tng tc trc tip vi mt c s d liu s dng nhng i tng ca nhng lp managed provider (nh cung cp c qun l). Nhng i tng ny cho php bn k ni ti c s d liu v thc thi nhng cu lnh SQL trong lc kt ni trc tip ti c s d liu. Chng trnh v d bn thy trong Chng 1 ch ra cch kt ni trc tip ti mt c s d liu v c nhng hng t mt bng trong mt hng duy nht i ti.

ADO.NET cng cho php bn lm vic trong mt tnh trng khng kt ni. Khi thc hin iu ny, bn lu tr thng tin t mt c s d liu mt cch cc b trong b nh ca my tnh trn chng trnh ca bn ang chy. Bn ct gi thng tin ny s dng nhng i tng ca nhng lp Dataset. Mt khi bn c thng tin ny trong b nh, bn c th c v thao tc vi thng tin ny. Chng hn, bn c hin th nhng ct cho nhng hng, thm nhng hng mi, sa i nhng hng, v xa nhng hng. Mt cch nh k, bn s kt ni li ti c s d liu ng b ha (hay cp nht) nhng thay i m bn lm cch cc b vi c s d liu. Khiu ngt kt ni ny cho php bn vit nhng ng dng chy trn Internet, cng nh cho nhng thit b khng c lun kt ni ti PDAs c s d liu- v d nh Palm v Pocket PC. Chng ny cung cp nhng m t v nhng lp ADO.NET , cng nh mt chng trnh C# y - n kt ni ti mt c s d liu, lu gi nhng hng vo vng nh cc b, ri ngt kt ni khi c s d liu, v c ni dung ca nhng hng cc b ny trong tnh trng ngt kt ni vi c s d liu. Kh nng lu gi mt bn sao cc b ca nhng hng truy xut c t c s d liu l mt trong s nhng sc mnh chnh ca ADO.NET. Chng trnh v d minh ha nhng tng c bn ca vic s dng ADO.NET theo kiu ngt kt ni c nhng hng t c s d liu v l tr chng mt cch cc b trong b nh. Trong nhng chng sau , bn s thy cch sa i d liu cc b v sau ng b ha nhng s thay i vi c s d liu nh th no. Chng ny t nn tng cho Phn II, "Lp trnh c s d liu c bn vi ADO.NET, " Bn s thy nhng chi tit v nhng lp khc nhau ca ADO.NET trong phn II ny. c trng trong chng ny: Nh cung cp c qun l (Managed Provider) v nhng lp Tp d liu chung (Generic Data Set) Thc hin mt pht biu SELECT SQL v ct gi nhng hng cc b.

Nh cung cp c qun l v nhng lp tp d liu chung


cung cp s truy cp c s d liu c c kt ni ln khng kt ni, ADO.NET nh ngha hai tp hp ca lp: Managed Provider (nh cung cp c qun l) v generic data (d liu chung). Bn s dng nhng i tng ca nhng lp managed provider trc tip kt ni ti mt c s d liu v ng b ha d liu cc b c ct gi ca bn vi c s d liu. Bn c th s dng nhng lp managed provider c nhng hng t c s d liu trong mt hng duy nht i ti . Bn s dng mt tp hp khc nhau ca nhng lp managed provider ty thuc vo c s d liu bn ang s dng. Bn s dng nhng i tng ca nhng lp generic data (d liu chung) ct gi mt bn sao cc b ca thng tin c truy xut t c s d liu. Bn sao ny c lu tr trong b nh ca my tnh ni chng trnh C# ang chy. Lp d liu chung chnh l lp System.Data.DataSet . Nhng lp d liu chung, nh tn ca gi ca chng, khng c g c bit so vi bt k c s d liu no, v bn lun lun s dng cng nhng lp ny bt k c s d liu no bn ang s dng. Nhng lp d liu chung i din cho thng tin c truy xut t c s d liu nh XML.

Nhng lp Managed Provider (Nh cung cp c qun l)


Nhng i tng managed provider (nh cung cp c qun l) cho php bn trc tip truy cp mt c s d liu, v bn s c gii thiu v nhng lp cho php bn to ra nhng i tng ny trong mc ny. Bn s dng nhng i tng managed provider k ni ti c s d liu , c v vit thng tin xui ngc ti c s d liu. Hnh 5.1 minh ha mt s nhng i tng managed provider (nh cung cp c qun l) v chng lin quan ln nhau nh th no.

Hnh 5.1: Mt s nhng i tng nh cung cp c qun l Hin thi c ba tp hp ca nhng lp managed provider , v mi tp hp c thit k lm vic vi nhng tiu chun c s d liu khc nhau: Nhng lp SQL Server Managed Provider (b cung cp c qun l SQL Server) : Bn s dng nhng lp SQL Server managed provider kt ni ti mt c s d liu SQL Server. Nhng lp OLE DB Managed Provider : Bn s dng nhng lp DB OLE (Object Linking and Embedding for Databases) managed provider kt ni vi bt k c s d liu no h tr OLE DB, nh Access hoc Oracle. Nhng lp ODBC Managed Provider : Bn s dng nhng lp ODBC (Open Database Connectivity) managed provider ni ti bt k c s d liu no h tr ODBC. Tt c nhng c s d liu chnh h tr ODBC, nhng ODBC in hnh chm hn hai tp hp lp trc khi lm vic vi. NET. Bn cn phi s dng nhng lp ODBC managed provider ch khi khng cn bt k lp OLE DB managed provider thay th no khc. Ba tp hp lp ny u thc thi cng chc nng c bn nh nhau. Ghi ch: Bt c khi no m bn thy "Sql" ti khi u ca mt tn lp managed provider, bn bit lp ny c s dng vi mt c s d liu SQL Server. Chng hn, SqlConnection cho php bn kt ni ti mt c s d liu SQL Server. Tng t, "OleDb" dnh cho nhng c s d liu h tr OLE DB. Chng hn, OleDbConnection cho php bn kt ni ti mt c s d liu s dng OLE DB. Cui cng, "Odbc" dnh cho nhng c s d liu h tr ODBC. Chng hn, OdbcConnection cho php bn kt ni ti mt c s d liu s dng ODBC. Ti tham chiu ti tt c nhng lp ny nh nhng lp kt ni (Connection). Bn s thy mt s lp managed provider khc nhau trong nhng mc sau y.

Nhng lp kt ni (Connection)
C ba lp kt ni SqlConnection, OleDbConnection, v OdbcConnection. Bn s dng mt i tng ca lp SqlConnection kt ni ti mt c s d liu My ch phc v SQL. Bn s dng mt i tng ca lp OleDbConnection kt ni ti bt k c s d liu no h tr OLE DB, nh uy nhTrp hay Li tin tri.Access hay Oracle bn s dng mt i tng ca lp OdbcConnection kt ni ti bt k c s d liu no h tr ODBC. Cui cng, tt c truyn thng vi mt c s d liu c thc hin thng qua mt i tng kt ni.

Nhng lp Command
C ba lp Command : SqlCommand, OleDbCommand, v OdbcCommand. Bn s dng mt i tng lnh (Command) chy mt cu lnh SQL, nh mt pht biu SELECT, INSERT, UPDATE, hay DELETE . Bn cng c th s dng mt i tng Command gi mt th tc lu tr hay truy xut nhng hng t mt bng ch nh. Bn chy lnh c ct gi trong mt i tng Command s dng mt i tng Connection.

Nhng lp Tham s
C ba lp Tham s: SqlParameter, OleDbParameter, v OdbcParameter. Bn s dng mt i tng Parameter gi mt tham s ti mt i tng Command. Bn c th s dng mt Parameter gi mt gi tr ti mt cu lnh SQL hay mt phng thc gi th tc lu tr. Bn c th lu gi nhiu i tng tham s (Parameter) trong mt i tng Command thng qua mt i tng ParameterCollection (tp hp tham s).

Nhng lp ParameterCollection (tp hp tham s)


C ba lp ParameterCollection: SqlParameterCollection, OleDbParameterCollection, V OdbcParameterCollection. Bn s dng mt i tng ParameterCollection ct gi nhiu i tng tham s cho mt i tng Command.

Nhng lp DataReader
C ba lp DataReader: SqlDataReader, OleDbDataReader, v OdbcDataReader. Bn s dng mt i tng DataReader c nhng hng c truy xut t c s d liu s dng mt i tng Command. Nhng i tng DataReader ch c th c dng c nhng hng theo mt hng i ti. Nhng i tng DataReader ng vai mt gii php cho mt i tng Dataset. Bn khng th s dng mt DataReader sa i nhng hng trong c s d liu. Mo nh: c nhng hng s dng mt i tng DataReader in hnh nhanh chng hn c t mt Dataset.

Nhng lp DataAdapter
C ba lp DataAdapter: SqlDataAdapter, OleDbDataAdapter, v OdbcDataAdapter. Bn s dng mt i tng DataAdapter di chuyn nhng hng gia mt i tng Dataset v mt c s d liu. Bn s dng mt i tng DataAdapter ng b ha (cp nht) nhng hng c lu gi cc b ca bn ti c s d liu. S ng b ha ny c thc hin thng qua mt i tng Connection. Chng hn, bn c th c nhng hng t c s d liu vo trong mt Dataset thng qua mt DataAdapter, sa i nhng hng trong Dataset ca bn, v y nhng s thay i ti c s d liu thng qua mt i tng Connection.

Nhng lp CommandBuilder
C ba lp CommandBuilder: SqlCommandBuilder, OleDbCommandBuilder, v OdbcCommandBuilder. Bn s dng mt i tng CommandBuilder t ng pht sinh nhng lnh (Commands) INSERT, UPDATE, and DELETE bng n, n ng b ha bt k s thay i no bn thc hin vi mt i tng Dataset ti c s d liu. S ng b ha ny c thc hin thng qua mt i tng DataAdapter.

Nhng lp Giao dch (Transaction)


C ba lp Giao dch: SqlTransaction, OleDbTransaction, v OdbcTransaction. Bn s dng mt i tng Transaction i din cho mt Giao dch c s d liu. Mt giao dch c s d liu l mt nhm nhng s pht biu m sa i nhng hng trong c s d liu. Nhng pht biu ny c coi nh mt n v tc v lgc . Chng hn, trong trng hp ca mt giao dch cng vic ngn hng, bn c th mun rt tin t mt

ti khon v chuyn tin vo trong ti khon khc. Ri bn giao ph c hai s thay i ny nh mt n v, hay nu sy ra vn , hi nguyn c hai s thay i ny.

Khng gian tn cho nhng lp Nh cung cp c qun l (Managed Provider )


Nhng lp managed provider cho SQL Server (SqlConnection vn vn) c khai bo trong khng gian tn System .Data.SqlClient . Nhng lp cho nhng c s d liu tng thch OLE DB (SqlDbConnection vn vn) c khai bo trong khng gian tn System.Data.OleDb. Nhng lp cho nhng c s d liu tng thch ODBC (OdbcConnection vn vn) c khai bo trong khong gian tn System.Data.Odbc . Ghi ch: Vo thi gian vit m, bn phi ti nhng lp ODBC managed provider t trang web ca Microsoft ti http: // msdn.microsoft.com /Download. vic ti ny l ring bit t NET SDK.. Tm kim " ODBC.NET Data Provider" trong mc lc MSDN. Trong mc sau y, bn s hc v nhng lp d liu chung.

Nhng lp D liu Chung


Nh bn hc trong mc trc y, bn c th s dng nhng i tng managed data provider (b cung cp d liu c qun l) kt ni ti c s d liu thng qua mt i tng Connection, pht hnh mt cu lnh SQL thng qua mt i tng Command, v c nhng hng c truy xut s dng mt i tng DataReader; tuy nhin, bn c th c nhng hng ch trong mt hng duy nht i ti v bn phi c kt ni ti c s d liu. Nhng i tng d liu chung (generic data) cho php bn lu gi mt bn sao cc b ca thng tin c ct gi trong c s d liu. iu ny cho php bn lm vic vi thng tin trong khi ngt kt ni li c s d liu. Bn c th c nhng hng trong bt k trt t no, v bn c th tm kim, phn loi, v lc nhng hng trong mt cch linh hot. Bn c th thm ch sa i nhng hng ny v sau ng b ha nhng s thay i ti c s d liu Hnh 5.2 minh ha mt s nhng i tng tp d liu chung v chng lin h ln nhau nh th no. Cu ni gia b cung cp c qun l (managed provider) v nhng i tng tp d liu chung (generic data set objects) l DataAdapter, bn thng dng n ng b ha nhng s thay i gia Dataset ca bn v c s d liu. Nhng i tng tp d liu chung

Hnh 5.2: Mt s nhng i tng tp d liu chung Nhng mc sau y phc tho mt s lp d liu chung.

Lp Dataset
Bn s dng mt i tng ca lp Dataset i din cho mt bn sao cc b ca thng tin c ct gi trong c s d liu. Bn c th thc hin nhng thay i ti m bn sao cc b trong Datset ca bn v sau sau ng b ha nhng thay i vi c s d liu thng qua mt i tng DataAdapter b cung cp c qun l. Mt i tng Dataset c th i din cho nhng cu trc c s d liu nh nhng bng, nhng hng v nhng ct. Bn c th thm ch thm nhng s rng buc vo nhng bng cc b c ct gi ca bn gim st vic thi hnh nhng s rng buc kha chnh v kha ngoi. Bn cng c th s dng mt i tng Dataset i din cho d liu XML. Trong thc t, tt c thng tin c ct gi trong mt Dataset c i din cho s dng XML, Bao gm thng tin truy xut t c s d liu.

Lp DataTable
Bn s dng mt i tng ca lp DataTable i din cho mt bng. Bn c th ct gi nhiu i tng DataTable trong mt Dataset thng qua mt i tng DataTableCollection. Mt i tng Dataset c mt thuc tnh tn Tables, m bn thng s dng n truy cp DataTableCollection cha nhng i tng DataTable c ct gi trong Dataset ny.

Lp DataRow

Bn s dng mt i tng ca lp DataRow i din cho mt hng. Bn c th ct gi nhiu i tng DataRow trong mt DataTable thng qua mt i tng DataRowCollection. Mt i tng DataTable c mt thuc tnh tn Rows , bn thng s dng n truy cp DataRowCollection cha nhng i tng DataRow c ct gi trong DataTable ny.

Lp DataColumn
Bn s dng mt i tng ca lp DataColumn i din cho mt ct. Bn c th lu gi nhiu i tng DataColumn trong mt DataTable thng qua mt i tng DataColumnCollection. Mt i tng DataTable c mt thuc tnh tn Columns, bn thng s dng n truy cp DataColumnCollection cha nhng i tng DataColumn c ct gi trong DataTable ny.

Lp Rng buc (Constraint Class)


Bn s dng mt i tng ca lp Constraint (Rng buc) i din cho mt s rng buc c s d liu ,n s kt buc trn mt hoc nhiu i tng DataColumn ca mt DataTable. Bn c th ct gi nhiu i tng Constraint trong mt DataTable thng qua mt i tng ConstraintCollection. Mt i tng DataTable c mt thuc tnh tn Constraints, bn thng s dng n truy cp ConstraintCollection cha nhng i tng Constraints c ct gi trong DataTable ny.

Lp DataView
Bn s dng mt i tng ca lp DataView xem ch nhng hng ch nh trong mt i tng DataTable s dng mt b lc (filter), n ch r tiu chun hn ch nhng hng.

Lp DataRelation
Bn s dng mt i tng ca lp DataRelation i din cho mt mi quan h gia hai i tng DataTable. Bn c th s dng mt i tng DataRelation m hnh ha mi quan h cha con gia hai bng c s d liu. Bn c th lu gi nhiu i tng DataRelation trong mt Dataset thng qua mt i tng DataRelationCollection. Mt i tng Dataset c mt thuc tnh tn Relations, bn thng s dng n truy cp DataRelationCollection cha nhng i tng DataRelation ct gi trong Dataset ny.

Lp UniqueConstraint
Bn s dng mt i tng ca lp UniqueConstraint (rng buc kha chnh) i din cho mt s rng buc c s d liu, n bt buc gi tr ny - c ct gi trong mt i tng DataColumn phi l duy nht. Lp UniqueConstraint c bt ngun t lp Constraint . Bn c th lu gi nhiu i tng UniqueConstraint mt DataTable thng qua mt i tng ConstraintCollection.

Lp ForeignKeyConstraint (rng buc kha ngoi)


Bn s dng mt i tng ca lp ForeignKeyConstraint ch r hnh ng c thc hin khi nhng gi tr ct trong bng cha c cp nht hay b xa. Lp ForeignKeyConstraint c bt ngun t lp Constraint. Bn c th c c hai - nhng hng con b xa (hot ng lin tng), v gn nhng ct con ti null, hay gn nhng ct con ti mt gi tr mc nh. Bn c th ct gi nhiu i tng ForeignKeyConstraint trong mt DataTable thng qua mt i tng ConstraintCollection.

Khng gian tn cho nhng lp D liu chung


Nhng lp Dataset, DataTable, DataRow, DataColumn, DataRelation, Constraint (S Rng buc), v

DataView u c khai bo trong H thng. D liu namespace. Namespace ny cha ng nhng lp khc m bn c th s dng trong nhng chng trnh (ca) cc bn. Bn c th nhn nhiu tp hp (ca) nhng lp khai bo trong khng gian tn (namespace) System.Data s dng ti liu .NET.. Chng 1 gii thch cch bn truy cp ti liu ny nh th no. Trong mc k tip bn s thy mt v d n gin minh ha cch pht hnh mt pht biu SQL truy xut nhng hng t bng nhng khch hng, v ri ct gi nhng hng c tr v trong mt i tng Dataset. Chng trnh ny cho bn mt s hiu bit c bn v vic lm sao s dng mt s lp b cung cp c qun l v nhng lp d liu chung phc tho trc . trong phn II, Bn s thy nhng chi tit ca nhng lp khc nhau s dng trong v d ny.

Thc hin mt pht biu SQL SEL:ECT v lu gi nhng hng cc b.


Trong v d c trng trong mc ny, bn s xem xt cch kt ni ti c s d liu Northwind my ch phc v SQL v thc hin mt pht biu SELECT SQL nh th no truy xut nhng ct CustomerID, CompanyName, ContactName, v Address cho 10 hng u tin t bng nhng khch hng nh th no. Nhng hng ny c lu gi trong mt i tng Dataset. Ghi nh: V ti s s dng mt c s d liu my ch phc v SQL, Ti s s dng nhng lp SQL Server managed provider trong v d.

Phc tho Th tc
Bn c th s dng nhng bc sau y truy xut nhng hng vo trong mt i tng Dataset : 1. Cng thc ha mt chui cha nhng chi tit ca kt ni c s d liu. 2. To ra mt i tng SqlConnection kt ni ti c s d liu, gi connection string (chui kt ni) ti b khi dng. 3. Cng thc ha mt chui cha mt pht biu SELECT truy xut nhng ct cho nhng hng t bng nhng khch hng. 4. To ra mt i tng SqlCommand gi pht biu SELECT. 5. Gn thuc tnh CommandText ca SqlCommand ti chui SELECT. 6. To ra mt i tng SqlDataAdapter. 7. Gn thuc tnh SelectCommand ca i tng SqlAdapter ti i tng SqlCommand. 8. To ra mt i tng Dataset lu gi nhng kt qu ca pht biu SELECT. 9. M kt ni c s d liu s dng phng thc OPEN() ca i tng SqlConnection. 10. Phng thc Fill() ca i tng SqlDataAdapter truy xut nhng hng t bng, ri lu gi nhng hng cc b trong mt DataTable ca i tng Dataset. 11. ng kt ni c s d liu s dng phng thc Close() ca i tng SqlConnection c to ra trong bc 1. 12. Ly i tng DataTable t i tng Dataset. 13. Hin th nhng ct cho mi hng trong DataTable, s dng mt i tng DataRow truy cp mi hng trong DataTable.

Trong nhng mc sau y bn s hc v nhng chi tit ca nhng bc ny v xem m v d.

Bc 1: Cng thc ha mt chui cha nhng chi tit ca kt ni C s d liu


Khi kt ni ti mt c s d liu my ch phc v SQL, chui kt ni ca bn phi ch r nhng yu t sau: Tn ca my tnh trn SQL Server ang chy. Bn gn tn ny trong trong phn Server ca chui kt ni. Nu SQL Server ang chy trn my tnh cc b ca bn, bn c th s dng localhost lm tn Server. V d: Server= Localhost. Tn ca c s d liu. Bn gn tn ny trong phn database ca chui kt ni. V d: database = Northwind. Tn ngi dng kt ni ti c s d liu . Bn t tn ny trong phn uid ca chui. V d: uid= sa. Mt khu ca ngi dng c s d liu. Bn t mt m ny trong phn pwd ca chui kt ni. V d: pwd= sa. Ghi nh: in hnh, DBA (database administrator: ngi qun tr c s d liu) ca t chc ca bn s cung cp cho bn nhng gi tr thch hp cho chui kt ni. DBA chi trch nhim v iu hnh c s d liu. V d sau y to ra mt chui t tn connectionString v gn n ti mt chui thch hp kt ni ti c s d liu Northwind ang chy trn my tnh cc b ca bn, s dng ngi dng sa ( vi mt khu : sa) kt ni ti c s d liu ny: string connectionString = "server=localhost;database=Northwind;uid=sa;pwd=sa"; Chui kt ni ca bn s khc ty thuc cch bn kt ni ti c s d liu Northwind ca bn nh th no.

Bc 2: To mt i tng SqlConnection kt ni ti C s d liu


To ra mt i tng SqlConnection kt ni ti c s d liu, gi chui kt ni c to ra trong bc trc ti b khi dng (constructor). Bn s dng mt i tng ca lp SqlConnection kt ni ti mt c s d liu my ch phc v SQL. V d sau y to ra mt i tng SqlConnection c tn mySqlConnection, chuyn ConnectionString ( c to ra trong bc 1) ti b khi dng: SqlConnection mySqlConnection = new SqlConnection(connectionString);

Bc 3: Cng thc ha mt chui cha pht biu SELECT


Cng thc ha mt chui cha pht biu SELECT truy xut nhng ct CustomerID, CompanyName, ContactName, v Address cho 10 hng u tin t bng nhng khch hng. Chng hn: string selectString = "SELECT TOP 10 CustomerID, CompanyName, ContactName, Address "+ "FROM Customers "+ "ORDER BY CustomerID"; Ghi nh: Bn s dng t kha TOP trong s kt hp vi mt mnh ORDER BY truy xut N hng u tin t mt pht biu SELECT. Bn c th hc nhiu hn v t kha TOP trong Chng 3.

Bc 4: To ra mt i tng SqlCommand gi pht biu SELECT

Bn c th gi phng thc CreateCommand() ca mySqlConnection to ra mt i tng SqlCommand mi cho kt ni ny. phng thc CreateCommand() tr v mt i tng SqlCommand mi cho i tng SqlConnection. Trong v d sau y, mt i tng SqlCommand mi c tn mySqlCommand c gn ti i tng SqlCommand c tr v bi vic gi phng thc CreateCommand() ca mySqlConnection: SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

Bc 5: gn thuc tnh CommandText ca i tng SqlCommand ti chui SELECT


Gn thuc tnh CommandText ca i tng SqlCommand ca bn ti chui SELECT c to ra trong bc 4. Thuc tnh CommandText cha cu lnh SQL bn mun thc hin. Trong v d sau y, thuc tnh CommandText ca mySqlCommand c gn ti selectString: mySqlCommand.CommandText = selectString;

Bc 6: To ra mt i tng SqlDataAdapter
Bn s dng mt i tng SqlDataAdapter di chuyn thng tin gia i tng Dataset ca bn v c s d liu. Bn s thy cch to ra mt i tng Dataset trong bc 8. V d sau y to ra mt i tng SqlDataAdapter c tn mySqlDataAdapter: SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();

Bc 7: Gn thuc tnh SelectCommand ca i tng SqlAdapter ti i tng SqlCommand


Thuc tnh SelectCommand cha pht biu SELECT bn mun chy. Trong v d sau y, thuc tnh SelectCommand ca mySqlDataAdapter c gn ti mySqlCommand: mySqlDataAdapter.SelectCommand = mySqlCommand;

Bc 8: To ra mt i tng Dataset lu gi nhng kt qu ca pht biu SELECT


Bn s dng mt i tng Dataset lu gi mt bn sao cc b ca thng tin c truy xut t c s d liu. V d sau y to ra mt i tng Dataset c tn myDataSet: DataSet myDataSet = new DataSet();

Bc 9: M kt ni c s d liu s dng phng thc Open() ca i tng SQLConnection


V d sau y gi phng thc Open() cho mySqlConnection: mySqlConnection.Open(); Mt khi bn m kt ni c s d liu, bn c th truy cp c s d liu.

Bc 10: Gi phng thc Fill() ca i tng SqlDataAdapter truy xut nhng hng t bng
Gi phng thc Fill() ca i tng SqlDataAdapter ca bn truy xut nhng hng t c s d liu, lu gi nhng hng ny cc b trong mt DataTable ca i tng Dataset ca bn.

Phng thc Fill() l qu ti, v phin bn bn s thy trong v d chp nhn hai tham s: Mt i tng Dataset Mt chui cha tn ca i tng DataTable c to ra trong Dataset . Phng thc Fill() to ra mt DataTable trong Dataset vi tn ch nh v chy pht biu SELECT. DataTable c to ra trong Dataset ca bn ri c c tr vi nhng hng c truy xut bi pht biu SELECT. V d sau y gi phng thc Fill() ca mySqlDataAdapter, chuyn MyDataSet v " Customers " ti phng thc Fill(): mySqlDataAdapter.Fill(myDataSet, "Customers"); Phng thc Fill() to ra mt i tng DataTable myDataSet tn Customers trong myDataset v c tr n vi nhng hng c truy xut bi pht biu SELECT. Bn c th truy cp nhng hng ny, Ngay c khi ngt kt ni vi c s d liu.

Bc 11: ng kt ni vi C s d liu
ng kt ni c s d liu s dng phng thc Close() ca i tng SqlConnection c to ra trong bc u tin. Chng hn: mySqlConnection.Close(); Ghi nh: tt nhin, bn khng cn phi ng ngay lp tc kt ni c s d liu trc khi c nhng hng c lu gi cc b t Dataset ca bn. Ti ng kt ni ti im ny trong v d ch cho bit l qu thc bn c th c nhng hng c lu gi cc b - thm ch khi ngt ra khi c s d liu.

Bc 12: Ly i tng DataTable t i tng Dataset


Ly i tng DataTable c to ra trong bc 10 t i tng Dataset. Bn ly mt DataTable t Dataset ca bn s dng thuc tnh Tables, n tr li mt i tng DataTableCollection . ly DataTable ring l t Dataset ca bn, bn gi tn ca DataTable ca bn trong cp du mc ("Customers ", chng hn) ti thuc tnh Tables. Thuc tnh Tables s tr v DataTable m bn yu cu, bn c th ct gi n trong mt i tng DataTable mi m bn khai bo. Trong v d sau y, myDataSet.Tables ["Customers "] tr v Customers DataTable c to ra trong myDataSet trong bc 10, v lu gi DataTable c tr v trong myDataTable: DataTable myDataTable = myDataSet.Tables["Customers"]; Ghi nh: Bn cng c th ch r DataTable bn mun c bi gi mt gi tr s ti nhng thuc tnh Tables . Chng hn, myDataSet.Table [0] cng tr v Customers DataTable.

Bc 13: Trnh by nhng ct cho mi hng trong DataTable


Trnh by nhng ct cho mi hng trong DataTable, s dng mt i tng DataRow truy cp mi hng trong DataTable. Lp DataTable nh ngha mt thuc tnh c tn Rows n tr v mt i tng DataRowCollection cha nhng i tng DataRow ct gi trong DataTable ny. Bn c th s dng nhng thuc tnh Rows trong mt vng lp foreach lp li qua nhng i tng DataRow. Chng hn: foreach (DataRow myDataRow in myDataTable.Rows) { // ... access the myDataRow object }

Mi i tng DataRow ct gi nhng i tng DataColumn cha nhng gi tr c truy xut t nhng ct ca bng trong c s d liu. Bn c th truy cp nhng gi tr ct ny bi vic gi tn ca ct trong cp du mc i ti i tng DataRow. Chng hn, myDataRow[ " CustomerID "] tr v gi tr ca ct CustomerID. Trong v d sau y, mt vng lp foreach lp li qua nhng i tng DataRow trong myDataTable, v nhng gi tr ct c trnh by cho mi hng. foreach (DataRow myDataRow in myDataTable.Rows) { Console.WriteLine("CustomerID = "+ myDataRow["CustomerID"]); Console.WriteLine("CompanyName = "+ myDataRow["CompanyName"]); Console.WriteLine("ContactName = "+ myDataRow["ContactName"]); Console.WriteLine("Address = "+ myDataRow["Address"]); } Nh bn c th thy, tn ca mi ct c gi i trong nhng du mc ti mi i tng DataRow, m ri tr v gi tr ct. Ghi nh: Bn cng c th ch r ct bn mun c bi vic gi i mt gi tr s trong cp du mc i. Chng hn, myDataRow[0] cng tr v gi tr ct CustomerID.

t mi th cng nhau
Danh sch 5.1 cho thy mt chng trnh y s dng nhng bc ny. Chng trnh ny c tn SelectIntoDataSet.cs v c nh v trong th mc ch05. Danh sch 5.1: SELECTINTODATASET.CS /* SelectIntoDataSet.cs illustrates how to perform a SELECT statement and store the returned rows in a DataSet object */ using System; using System.Data; using System.Data.SqlClient; class SelectIntoDataSet { public static void Main() { // step 1: formulate a string containing the details of the // database connection string connectionString = "server=localhost;database=Northwind;uid=sa;pwd=sa"; // step 2: create a SqlConnection object to connect to the // database, passing the connection string to the constructor SqlConnection mySqlConnection = new SqlConnection(connectionString); // step 3: formulate a SELECT statement to retrieve the // CustomerID, CompanyName, ContactName, and Address // columns for the first ten rows from the Customers table string selectString = "SELECT TOP 10 CustomerID, CompanyName, ContactName, Address "+

"FROM Customers " + "ORDER BY CustomerID"; // step 4: create a SqlCommand object to hold the SELECT statement SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); // step 5: set the CommandText property of the SqlCommand object to // the SELECT string mySqlCommand.CommandText = selectString; // step 6: create a SqlDataAdapter object SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(); // step 7: set the SelectCommand property of the SqlAdapter object // to the SqlCommand object mySqlDataAdapter.SelectCommand = mySqlCommand; // step 8: create a DataSet object to store the results of // the SELECT statement DataSet myDataSet = new DataSet(); // step 9: open the database connection using the // Open() method of the SqlConnection object mySqlConnection.Open(); // step 10: use the Fill() method of the SqlDataAdapter object to // retrieve the rows from the table, storing the rows locally // in a DataTable of the DataSet object Console.WriteLine("Retrieving rows from the Customers table"); mySqlDataAdapter.Fill(myDataSet, "Customers"); // step 11: close the database connection using the Close() method // of the SqlConnection object created in Step 1 mySqlConnection.Close(); // step 12: get the DataTable object from the DataSet object DataTable myDataTable = myDataSet.Tables["Customers"]; // step 13: display the columns for each row in the DataTable, // using a DataRow object to access each row in the DataTable foreach (DataRow myDataRow in myDataTable.Rows) { Console.WriteLine("CustomerID = "+ myDataRow["CustomerID"]); Console.WriteLine("CompanyName = "+ myDataRow["CompanyName"]); Console.WriteLine("ContactName = "+ myDataRow["ContactName"]); Console.WriteLine("Address = "+ myDataRow["Address"]); } } } u ra t chng trnh ny nh sau: Retrieving rows from the Customers table CustomerID = ALFKI CompanyName = Alfreds Futterkiste ContactName = Maria Anders

Address = Obere Str. 57 CustomerID = ANATR CompanyName = Ana Trujillo Emparedados y helados ContactName = Ana Trujillo Address = Avda. de la Constitucin 2222 CustomerID = ANTON CompanyName = Antonio Moreno Taquera ContactName = Antonio Moreno Address = Mataderos 2312 CustomerID = AROUT CompanyName = Around the Horn ContactName = Thomas Hardy Address = 120 Hanover Sq. CustomerID = BERGS CompanyName = Berglunds snabbkp ContactName = Christina Berglund Address = Berguvsvgen 8 CustomerID = BLAUS CompanyName = Blauer See Delikatessen ContactName = Hanna Moos Address = Forsterstr. 57 CustomerID = BLONP CompanyName = Blondesddsl pre et fils ContactName = Frdrique Citeaux Address = 24, place Klber CustomerID = BOLID CompanyName = Blido Comidas preparadas ContactName = Martn Sommer Address = C/ Araquil, 67 CustomerID = BONAP CompanyName = Bon app' ContactName = Laurence Lebihan Address = 12, rue des Bouchers CustomerID = BOTTM CompanyName = Bottom-Dollar Markets ContactName = Elizabeth Lincoln Address = 23 Tsawassen Blvd.

Tm lc
Trong chng ny, bn c mt tng quan v nhng lp ADO.NET , v bn kho st mt chng trnh y kt ni ti mt c s d liu, ct gi nhng hng cc b, ngt kt ni c s d liu, v c ni dung ca nhng hng cc b ny trong khi ngt kt ni vi c s d liu. ADO.NET cho php bn tng tc trc tip vi mt c s d liu s dng nhng i tng ca nhng lp managed provider (nh cung cp c qun l). Nhng i tng ny cho php bn kt ni ti c s d liu v thc hin nhng cu lnh SQL trong khi kt ni trc tip ti c s d liu. Bn s dng nhng tp hp khc nhau ca nhng lp managed provider , ph thuc vo c s d liu Bn s dng. ADO.NET cng cho php bn lm vic trong mt trng thi khng kt ni. Khi lm iu ny, bn lu tr thng tin t mt c s d liu vo trong b nh ca my tnh trn chng trnh ca bn ang chy. Bn lu gi thng tin ny s dng nhng i tng ca nhng lp Dataset. Mt s lp "b cung cp c qun l SQL Server" bao gm : SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter, v SqlTransaction. Bn s dng mt i tng ca lp SqlConnection kt ni ti mt c s d liu My ch phc v SQL. Bn s dng mt i tng ca lp SqlCommand i din cho mt cu lnh

SQL hay s gi th tc lu tr m bn s thc thi. Bn s dng mt i tng ca lp SqlDataReader c nhng hng truy xut c t mt c s d liu My ch phc v SQL. Bn s dng mt i tng ca lp SqlDataAdapter di chuyn nhng hng gia mt i tng Dataset v mt c s d liu My ch phc v SQL. Bn s dng mt i tng ca lp Dataset i din cho mt bn sao cc b ca thng tin c ct gi trong mt c s d liu. Bn cng c th s dng mt i tng Dataset i din cho d liu XML. Vi i tng bn c th ct gi trong mt Dataset bao gm nhng i tng : DataTable, DataRow, DataColumn, DataRelation, v DataView . Trong Chng 6, bn s hc s dng Visual Studio .NET nh th no to ra nhng chng trnh Windows.

Chng 6: Gii thiu nhng ng dng Windows v ADO.NET Tng quan


Trong nhng chng trc y, bn chy nhng chng trnh s dng cng c Command Prompt (du nhc lnh) Windows. Trong chng ny, bn s c gii thiu ti nhng ng dng Windows. Windows cung cp nhng phn t giao din ha, nh nhng thc n, nhng hp vn bn, v nhng nt rai, bn c th xy dng mt giao din trc quan rt d s dng. Bn c th to ra nhng ng dng Windows s dng ADO.NET, v bn s hc cch lm iu - s dng Visual Studio .NET (VS .NET) nh th no, trong chng ny. Nhng ng dng Windows l rt n gin hc v s dng bi v mi ngi tr nn quen thuc cch tng tc vi nhng my trong mt giao din trc quan. khp mi ni - Microsoft Word v Excel thc s l hai v d v s thnh cng ca nhng ng dng Windows nh nth no ,c th l bi v chng kt hp c hai sc mnh v s d dng s dng . c trng trong chng ny: Pht trin mt ng dng Windows n gin S dng nhng iu khin Windows Truy cp mt c s d liu vi mt iu khin DataGrid To ra mt Windows Form vi Data Form Wizard

Pht trin mt ng dng Windows n gin


Trong mc ny bn s thy cch to ra mt ng dng Windows n gin s dng VS .NET. ng dng ny s gm c mt form n cha mt nhn v mt nt. Khi bn kch nt, vn bn trong nhn s thay i ti mt li trch dn t v kch ca Shakespeare, Macbeth. Bn cng s thy cch bin dch v chy ng dng v d nh th no.

To ra ng dng Windows
Khi chy VS .NET bi chn Start Programs Microsoft Visual Studio .NET . to ra mt ng dng Windows mi, kch nt New Project trn trang Start page, hay chn File New Project. Mo nh: Bn cng c th to ra mt d n mi bng cch nhn Ctrl+ Shift+ N trn bn phm ca bn. Bn s thy hp thoi New Project, m bn s dng la chn kiu D n mun to ra. Bi v bn s to ra mt ng dng Windows C#, do bn chn th mc Visual C# Projects t danh sch Project Types, v chn

Windows Application t Templates area ( vng khun mu) ca hp thoi New Project (D n mi). VS .NET s gn mt tn mc nh cho d n ca bn; tn mc nh ny l WindowsApplication1, hay ci g tng t. Bn c th ch nh tn bn mun cho d n ca bn bi thay i vn bn trong trng Name; nh trnh by trong hnh 6.1

Hnh 6.1: To ra mt ng dng Windows C# trong Visual Studio .NET Ghi nh: Trng Location (v tr) ch r th mc ni nhng files thuc d n mi ca bn c ct gi. VS .NET s gn mt th mc mc nh, nhng bn c th thay i iu ny bng cch nhp vo th mc ring ca mnh. Th mc mc nh ny l Documents and Settings trn cng ca bn. Kch nt Ok tip tc. VS .NET s to ra mt th mc con mi c tn MyWindowsApplication trong th mc c ch r trong trng Location (v tr). Mt khi VS .NET to ra th mc, cng vi mt s file ban u cho d n ca bn, VS .NET s hin th mt form trng, nh trnh by trong Hnh 6.2. Bn c th hiu form ny nh tm vi bt m trn bn c th sp t nhng iu khin Windows tiu chun, nh nhng nhn, nhng hp vn bn, v nhng nt nhn. Bn s thm nhng iu khin vo Form ca bn khng lu sau y.

Hnh 6.2: Mt form trng

Lm vic vi Toolbox (hp cng c)


Bn thm nhng iu khin vo form ca bn bi chn iu khin t Toolbox v ko vo form ca bn. Bn cng c th kch v ko , hay nhn p vo iu khin th mt mt ci mi ca kiu ny ln trn form. Nh bn c th nhn thy trong Hnh 6.2 c trnh by trc , Toolbox bn tri ca form trng ny. Ghi ch: Nu bn khng nhn thy Toolbox (hp cng c), Bn c th hin th n bi chn View Toolbox, hay nhn Ctrl+ Alt+ X trn bn phm. Bn c th thy nhng phn t sn c trong Toolbox c phn loi vo trong nhng nhm vi nhng tn nh Data (D liu) v XML Schema (M hnh XML). Toolbox s hin ra ch nhng phm tr lin quan ti kiu ng dng bn ang pht trin. Danh sch sau y m t ni dung ca mt s nhng phm tr ny: Data: phm tr D liu cha nhng lp cho php bn truy cp v ct gi thng tin t mt c s d liu. Phm tr D liu bao gm nhng lp sau y: SqlConnection, SqlCommand, Dataset, v DataView, v nhng th khc lin quan n d liu. XML Schema: phm tr m hnh XML cha nhng lp php bn truy cp d liu XML. Dialog Editor: phm tr "B bin tp hp thoi" cha nhng iu khin m bn c th t trn nhng hp thoi Windows. Web Forms: nhng phm tr Web Forms cha nhng iu khin dnh cho vic hnh thnh nhng trang web. Bn c th thit k nhng form web s dng VS .NET v trin khai chng ti Ngi phc v thng tin Internet (IIS) ca Microsoft. Nhng form web ny c th s c chy thng qua Internet. Components: phm tr nhng thnh phn cha nhng lp nh: FileSystemWatcher, n cho php bn theo di nhng s thay i trong mt h thng tp tin my tnh. Nhng lp khc bao gm EventLog, DirectoryEntry, DirectorySearcher, MessageQueue, PerformanceCounter, Process, ServiceController, v Timer. Chng cho php bn thc hin nhiu thao tc h thng. Windows Forms: phm tr ca nhng form Windows cha nhng iu khin m bn c th thm vo mt form Windows . chng bao gm nhng nhn (label), nhng nt nhn (button), v nhng hp vn bn (text boxe) v mt s iu khin khc. Bn s s dng mt s nhng iu khin trong chng ny. HTML: phm tr HTML cha nhng iu khin m bn c th thm vo mt form web. Chng bao gm nhng nhn , nhng nt nhn, nhng bng, v nhng hnh nh, v nhng iu khin khc na trn form web. Trong mc k tip, bn s hc v nhng ca s thuc tnh.

Lm vic vi nhng ca s thuc tnh


Nhng ca s thuc tnh (Properties window) cha nhng kha cnh ca mt iu khin m bn c th thit t. Chng hn, bn c th gn mu nn ca form s dng thuc tnh BackColor. Mt s thuc tnh khc ca iu khin trn form bao gm ForeColor (mu nn) v BackgroundImage (mt nh nn). Nhng kiu iu khin khc nhau c nhng kiu thuc tnh khc nhau. Nh bn c th nhn thy t Hnh 6.2 c trnh by trc , nhng ca s thuc tnh bn phi ca form trng. Ghi ch: Nu bn khng nhn thy ca s nhng thuc tnh, bn c th hin th n bi chn View Window, hay bi nhn F4 trn bn phm . Properties

Bn thit t thuc tnh bi kch vng bn phi ca tn thuc tnh. hy bt u v kch vng bn phi ca thuc tnh BackColor xem vi mu sc m bn c th kich chn thit t thuc tnh ny. Trong mc k tip, bn s hc cch thm mt iu khin nhn v nt nhn vo form ca bn nh th no. Bn cng s t mt cp thuc tnh cho nhng iu khin ny.

Thm mt Nhn v mt iu khin Nt


thm mt nhn v mt iu khin nt vo form ca bn chn iu khin thch hp t Toolbox v ko n n form ca bn. Chng hn, thm mt nhn vo form bn, bn chn iu khin nhn (label) t Toolbox. Mt khi bn ko mt nhn ti form , bn c th thay i kch thc n bng cch s dng con chut hay gn thuc tnh Size (kch thc) trong ca s nhng thuc tnh (Properties window). Bn cng c th kch vo nhn trong Toolbox v ko n ln form. Lm cho nhn ca bn ln sao cho n tri ra theo chiu di ca form. Tip theo, thm mt iu khin nt bn di nhn ca bn, nh trong Hnh 6.3.

Hnh 6.3: Form vi mt nhn v mt iu khin nt Tip theo, bn s thay i mt s thuc tnh cho nhn v nt ca bn. Bn lm iu ny bi s dng ca s nhng thuc tnh. t thuc tnh Name ca nhn l myLabel. Gn nhng thuc tnh Name v Text cho nt ca bn l myButton v Press me!, tng ng. ng thi, t thuc tnh Text ca form ca bn l My Form. Ghi ch: Bn s dng thuc tnh Name khi tham chiu n mt iu khin Windows trong m C#. Tip theo, bn s thm mt dng m ti phng thc myButton_Click() . Phng thc ny c thc thi khi nt myButton c kch trong form ang chy ca bn. Cu lnh bn s thm vo myButton_Click() gn thuc tnh Text ca myLabel ti mt chui. Chui ny s cha ng mt dng t v kch ca Shakespeare, Macbeth. thm m, nhn p nt myButton v nhp vo m sau y trong vng m ca phng thc myButton_Click() : myLabel.Text = "Is this a dagger which I see before me,\n" + "The handle toward my hand? Come, let me clutch thee.\n" + "I have thee not, and yet I see thee still.\n" + "Art thou not, fatal vision, sensible\n" + "To feeling as to sight? or art thou but\n" + "A dagger of the mind, a false creation,\n" + "Proceeding from the heat-oppressed brain?";

Ghi ch: Nu bn l mt ngi hm m Shakespeare, bn s on nhn hng ny t cnh trc khi Macbeth git cht Vua Duncan. By gi bn hon tt form ca bn. V hy xy dng d n ca bn bi Build Build Solution, hay bi nhn Ctrl+ Shift+ B trn bn phm. chy form , bn chn Debug Start without Debugging , hay nhn Ctrl+ F5 trn bn phm . Mo nh: Bn c th s dng mt phm tt khi xy dng v chy form ca bn: nu Bn n gin chy form ca bn m khng xy dng n trc (Build Solution), VS .NET s kim tra xem phi chng bn c thc hin bt k s thay i no ti form ca bn t ln sau cng chy n . Nu bn thc hin mt s thay i, th VS .NET s trc tin xy dng li d n ca bn ri sau mi chy n. Hnh 6.4 trnh by form c chy sau khi nt Press me c kch.

Hnh 6.4: Form ang chy By gi bn c to ra v chy form, chng ta hy xem xt m c pht sinh bi VS .NET cho chng. M C# cho form ca bn c cha trong file Form1.cs . Bn s kho st m ny trong mc k tip.

Kho st M bn di Form
File Form1.cs cha m cho form ca bn. M ny thng c tham chiu n nh m bn di form ca bn, bi v bn c th hiu n nh mt th bn di s thit k trc quan cho form. Bn c th xem m form ca bn bi chn View Code, hay bi nhn kha F7 trn bn phm . Danh sch 6.1 cho thy ni dung ca file Form1.cs. Danh sch 6.1: Form1.cs using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace MyWindowsApplication { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form {

private System.Windows.Forms.Label myLabel; private System.Windows.Forms.Button myButton; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose(bool disposing) { if(disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.myLabel = new System.Windows.Forms.Label(); this.myButton = new System.Windows.Forms.Button(); this.SuspendLayout(); // // myLabel // this.myLabel.Location = new System.Drawing.Point(8, 8); this.myLabel.Name = "myLabel"; this.myLabel.Size = new System.Drawing.Size(288, 184); this.myLabel.TabIndex = 0; this.myLabel.Text = "label1"; // // myButton // this.myButton.Location = new System.Drawing.Point(120, 200);

this.myButton.Name = "myButton"; this.myButton.Size = new System.Drawing.Size(72, 24); this.myButton.TabIndex = 1; this.myButton.Text = "Press Me!"; this.myButton.Click += new System.EventHandler(this.myButton_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(304, 237); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.myButton, this.myLabel}); this.Name = "Form1"; this.Text = "My Form"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void myButton_Click(object sender, System.EventArgs e) { myLabel.Text = "Is this a dagger which I see before me,\n" + "The handle toward my hand? Come, let me clutch thee.\n" + "I have thee not, and yet I see thee still.\n" + "Art thou not, fatal vision, sensible\n" + "To feeling as to sight? or art thou but\n" + "A dagger of the mind, a false creation,\n" + "Proceeding from the heat-oppressed brain?"; } } } Nh bn c th thy, lp Form1 c bt ngun t lp System.Windows.Forms.Form . Lp Form i din cho mt form Windows. Ghi ch: Khng gian tn System.Windows.Forms cha nhiu lp khc nhau to ra nhng ng dng Windows. Hu ht nhng lp trong namespace ny c bt ngun t lp System.Windows.Forms.Control; lp ny cung cp chc nng c bn cho nhng iu khin bn c th t trn mt form. Lp Form1 khai bo hai i tng ring (Private) c tn myLabel v myButton, chng l nhng iu khin nhn v nt bn thm vo form ca bn trc . V i tng myLabel v myButton l ring (Private), y c ngha l chng ch c th tip cn trong lp Form1.

Access modifiers (nhng t b ngha truy cp) cho php bn ch r mc m vi mc mt thnh vin ca lp c th truy cp t bn ngoi lp. Bn cng c th s dng mt Access modifiers ch r mc m vi mc chnh lp ny c th dc truy cp. Bng 6.1 cho thy rng nhng t b ngha truy cp trong trt t gim dn tnh kh truy cp: Public c tnh kh truy cp nht, v Private c tnh kh truy cp km nht. Bng 6.1: nhng t b ngha truy cp ACCESS MODIFIER ACCESSIBILITY (t b ngha truy cp) (kh nng truy cp) public protected internal internal protected private Thnh vin c th truy cp lp ny khng hn ch. Ch nhng thnh vin bn trong lp, thnh vin mt lp dn xut hay lp trong cng chng trnh (hay assembly) c th truy cp lp ny.

Ch nhng thnh vin bn trong lp hay thnh vin ca lp trong cng chng trnh (hay assembly) c th truy cp. Ch nhng thnh vin bn trong lp hay thnh vin trong nhng lp c dn xut c th truy cp . Ch thnh vin bn trong lp c th tip cn. y l mc nh.

B khi dng ca lp Form1 gi phng thc InitializeComponent() . Phng thc ny thm myLabel v myButton vo form v gn nhng thuc tnh cho nhng i tng ny. Nhng thuc tnh ny bao gm s nh v (V tr trn form) Name, Size, TabIndex (th t iu khin c truy cp khi nhn phm Tab), v Text. Chng hn, m sau y gn nhng thuc tnh cho myLabel: this.myLabel.Location = new System.Drawing.Point(8, 8); this.myLabel.Name = "myLabel"; this.myLabel.Size = new System.Drawing.Size(288, 184); this.myLabel.TabIndex = 0; this.myLabel.Text = "label1"; Bn ch rng phng thc InitializeComponent() c bao trong nhng t ch th b tin x l #region v #endregion . Nhng ch th ny bao ly mt vng m v c th n trong ca s bin tp m ca VS .NET , ch li vn bn #region lp tc hin th . Hnh 6.5 cho thy m c n xut hin nh th no trong VS .NET.

Hnh 6.5: n m trong VS .NET s dng t ch th #region

xem m ang n, bn ch cn kch biu tng du cng bn tri ca m. Hnh 6.6 cho thy m bn trong nhng t ch th #region v #endregion .

Hnh 6.6: vic xem m c n trong VS .NET Phng thc Main() chy form bi gi phng thc Application.Run() . Lp Application l Static ( tnh) v cung cp mt s phng thc m bn c th s dng trong chng trnh Windows ca bn. V lp ny l Static, bn khng cn phi to ra mt th hin (instance) ca lp ny, v nhng thnh vin ca n lun lun sn sng bn trong form ca bn. Khi phng thc Run() c gi , form ca bn sn sng i nhng s kin t con chut v bn phm. Mt v d v mt s kin kch ca nt trong form ca bn. Phng thc myButton_Click() l phng thc m bn bin son trc n gn thuc tnh Text ca myLabel ti mt chui cha li trch dn t v kch Macbeth. Khi myButton c kch, phng thc myButton_Click() c gi v vn bn trong myLabel c thay i; bn thy iu ny khi bn chy form ca bn trc . Trong mc k tip, bn s hc v VS .NET Solution Explorer (b duyt gii php VS .NET).

Lm vic vi B thm d Gii php


Bn c th s dng VS .NET Solution Explorer xem nhng phn t trong d n ca bn, nh namespace cho d n ca bn. Tt nhin, mt d n c th cha hn mt namespace. xem Solution Explorer, bn chn View Solution Explorer. Mo nh: Bn cng c th xem B thm d gii php bi nhn Ctrl+ Alt+ L trn bn phm. Bn c th s dng Solution Explorer (B thm d gii php) xem nhng phn t sau y trong mt namespace ca d n : References: Nhng tham chiu bao gm nhng khng gian tn (namespaces) khc v nhng lp m ti m form ca bn vin n. Bn c th s dng pht biu using tham chiu Namespaces v nhng lp khc. Icon File: mt file biu tng c phn m rng nh . Ico. Bn s dng mt file biu tng gn hnh nh c hin th trong Windows Explorer cho ng dng ca bn. Assembly File : mt file assembly cha siu d liu cho assembly ca ng dng ca bn. Mt assembly l tp hp ca m cho ng dng ca bn.

Code Files: Mt file m l mt tp tin ngun chng trnh, nh M cho mt Form. Bn thy mt v d v iu ny trong mc trc " kho st M ng sau form ". Hnh 6.7 cho thy b thm d gii php cho v d ny.

Hnh 6.7: B thm d Gii php Nh bn c th thy trong Hnh 6.7, bn c th m rng hay gom li nhng phn t trnh by trong Solution Explorer (B thm d gii php) bi kch biu tng du cng hay tr, tng ng. Bn cng c th trnh by nhng thuc tnh cho mt phn t trong B thm d gii php : Khi bn c ca s nhng thuc tnh c trnh by, chn mt phn t trong B thm d gii php cng s hin th nhng thuc tnh cho phn t ny. Chng hn, trong Hnh 6.7, nhng thuc tnh cho d n MyWindowsApplication c trnh by; bn c th nhn thy file d n l MyWindowsApplication.csproj. Trong mc k tip, bn s hc v VS .NET Class View.

Lm vic vi Class View


Bn s dng VS .NET Class View kho st nhng lp, nhng phng thc v nhng i tng trong d n ca bn. xem Class View, bn chn View Class View. Mo nh: Bn cng c th xem Class View bi nhn Ctrl+ Shift+ C trn bn phm . Hnh 6.8 trnh by Class View cho v d.

Hnh 6.8: Class View

Nh bn c th thy trong Hnh 6.8, bn c th xem nhng lp, nhng phng php v nhng i tng cho v d. Bn cng c th xem nhng thuc tnh cho mt phn t c chn trong ca s nhng thuc tnh. V d, Hnh 6.8 cng cho thy nhng thuc tnh ca lp Form1. Tip theo, bn s c gii thiu ti nhng lai khc ca nhng iu khin trong Windows.

S dng nhng iu khin Windows


Bng 6.2 lit k nhng iu khin trn form Windows m bn c th nht t mc Windows Forms ca Toolbox (hp cng c). Bn c th t bt k iu khin no trong s chng ln form ca bn. Bng 6.2: nhng iu khin Windows Form thng dng CONTROL Label LinkLabel DESCRIPTION Hin th vn bn. Bn gn vn bn m bn mun trnh by cho thuc tnh Text. Tng t nh mt nhn, ngoi tr n trnh by mt mi siu lin kt (hyperlinks). Bn gn mi siu lin kt -hyperlink m Bn mun trnh by s dng thuc tnh Text. Bn gn ng dn qua s kin LinkClicked. Mt nt c th nhn. Thuc tnh Text xc nh vn bn c hin th trn nt. Mt hp cha vn bn m ngi s dng form ca bn c th son tho khi chy chng trnh. Thuc tnh Text cha vn bn s trnh by trong TextBox. Mt thc n bn c th thm vo mt form. Mt hp kim cha mt gi tr Boole true/false, n c gn l true khi ngi s dng kck t du kim trong hp.Thuc tnh Checked ch nh gi tr Boole cho hp kim. Mt nt rai cha mt gi tr i s Boole true/false, n d8c gn ti true bi ngi s dng nu h kch nt. Thuc tnh Checked ch nh gi tr Boole cho hp. Mt nhm hp cho php bn nhm nhng iu khin lin quan li thnh mt nhm. Chng hn, bn c th nhm nhng nt rai lin quan vi nhau. Quan trng nht, n cho php bn i s nhng iu khin ny nh mt nhm. Mt hp nh (picture box) trnh by mt hnh nh m bn gn cho thuc Image ca hp nh. Mt khung cha cho nhng iu khin khc nh nhng nt rai hay nhng hp nhm (group boxes). Mt khung li cha d liu c truy xut t mt ngun d liu, nh mt c s d liu chng hn. Bn gn ngun d liu s dng thuc tnh DataSource ca DataGrid. Mt danh sch ca nhng ty chn. Bn gn danh sch ca nhng ty chn s dng phng thc Add() ca thuc tnh tp hp Items .

Button TextBox MainMenu CheckBox RadioButton GroupBox

PictureBox Panel DataGrid ListBox

CheckedListBox Tng t nh mt hp danh sch ngoi tr mt nt kim c t bn tri ca mi tit mc trong danh sch. Nt kim cho php ngi s dng la chn nhng tit mc thng qua mt hp kim , khc vi s chn ng thi nhiu tit mc (multiselecting) vi phm Shift hoc Ctrl. ComboBox Kt hp mt trng son tho vi mt hp danh sch.

Trong mc k tip, bn s hc cch s dng mt iu khin DataGrid truy nhp nhng hng trong mt bng c s d liu nh th no.

S dng mt iu khin DataGrid truy nhp mt C s d liu


Trong mc ny, bn s hc s dng mt iu khin DataGrid truy cp nhng hng trong mt bng c s d liu nh th no. Theo nhng bc sau to ra mt DataGrid s dng VS .NET: 1. u tin, chn File New Project. Trong hp thoi New Project , chn Windows Application (ng dng Windows), v nhp DataGridWindowsApplication vo trng Name. 2. Kch OK tip tc. D n mi ca bn s cha mt form trng. 3. Thm mt iu khin DataGrid vo form bi la chn View Toolbox, chn mt DataGrid, v ko n ln form ca bn. Hnh 6.9 cho thy mt form vi mt DataGrid. Chnh sa DataGrid ca bn ln gn bng form ca bn bi ko nhng gc ca DataGrid ra ti st cc cnh ca form.

Hnh 6.9: Form vi mt DataGrid Tip theo, bn s thm mt i tng SqlConnection v mt i tng SqlDataAdapter vo form ca bn. Ghi ch: Bn s dng mt i tng SqlConnection kt ni ti mt c s d liu my ch phc v SQL, v mt i tng SqlDataAdapter di chuyn nhng hng gia My ch phc v SQL v mt i tng Dataset. Bn s hc nhng chi tit v cch ko nhng hng t c s d liu vo trong mt Dataset nh th no trong Chng 10, v cch y nhng thay i thc hin trong mt Dataset ti c s d liu trong Chng 11. Bn c th ko mt bng t mt c s d liu My ch phc v SQL ln trn form ca bn v c c nhng i tng SqlConnection v SqlDataAdapter c to ra ng thi trong mt bc. Bn s dng Server Explorer cho vic ny. Vi nhng c s d liu m khng hin th trong Server Explorer , nhng s la chn ca bn b hn ch. Bn c th s dng nhng iu khin trong mc Data ca Toolbox ko mi phn t ti form ca bn, v ri gn nhng thuc tnh cho mi i tng D liu vi Properties window (ca s nhng thuc tnh). Ghi ch: m Server Explorer, chn View > Server Explorer, hay nhn Cntl+ Alt+ S.

thm mt i tng SqlConnection v SqlDataAdapter vo form , bn thc hin nhng bc sau y: 1. M Server Explorer. 2. M kt ni ti c s d liu Northwind my ch phc v SQL ca bn ( hay to ra mt kt ni mi nu cn bi nhn chut phi trn node Data Connections v chn Add Connection, v nhp vo username sa v password cho c s d liu Northwind ca bn; bn c th ly mt khu t ngi qun tr c s d liu . 3. m su vo ti bng Customers trong c s d liu Northwind v ko ti form ca bn. iu ny to ra mt i tng SqlConnection c tn sqlConnection1 v mt i tng SqlDataAdapter c tn sqlDataAdapter1, nh trong hnh 6.10.

Hnh 6.10: Form vi nhng i tng SqlConnection v SqlDataAdapter 4. Kch i tng sqlConnection1 ca bn trnh by nhng thuc tnh cho i tng ny trong ca s nhng thuc tnh. 5. cho php sqlConnection1 truy cp c s d liu, bn cn t password (mt khu) kt ni. lm iu ny, thm mt chui con ang cha ng pwd vo thuc tnh ConnectionString ca sqlConnection1. tin hnh thm pwd= sa ( Bn c l cn c mt khu cho ngi s dng "sa" t ngi qun tr c s d liu ca bn) ti thuc tnh ConnectionString, nh trong hnh 6.11.

Hnh 6.11: t thuc tnh ConnectionString cho i tng sqlConnection1 Tip theo, bn s sa i pht biu SELECT SQL c dng truy xut nhng hng t bng nhng khch hng 1. Kch i tng sqlDataAdapter1 ca bn trnh by nhng thuc tnh i tng ny. 2. Kch biu tng du + bn tri thuc tnh SelectCommand trnh by nhng thuc tnh ng (dynamic properties); mt trong s nhng thuc tnh ng l thuc tnh CommandText, n cha pht biu SELECT (xem Hnh 6.12).

Hnh 6.12: thuc tnh SelectCommand cho i tng sqlDataAdapter1 3. Kch CommandText, V sau Kch nt vi ellipsis trnh by Ngi xy dng Cu hi, nh c a vo Hnh 6.13.

Hnh 6.13: B xy dng truy vn 4. Bn s dng B xy dng truy vn nh ngha nhng cu lnh SQL. Bn c th nhp cu lnh SQL, hay bn cng c th xy dng n mt cch trc quan. Chc chn rng tt c nhng ct u c chn t bng nhng khch hng s dng nhng khch hng ci hp ti nh b i (ca) Ngi xy dng Cu hi. 5. Kch OK tip tc. kim tra nhng hng tr li bi pht biu SELECT ny, thc hin nhng bc sau y: 1. Kch lin k Preview Data link gn y ca s nhng thuc tnh. Vic ny trnh by hp thoi Xem trc B tip hp D liu. 2. Trong D liu B tip hp Xem trc hp thoi, kch nt Tp d liu Khi p chy s pht biu c la chn, nh c a vo Hnh 6.14.

Hnh 6.14: xem trc nhng hng truy xut bi pht biu SELECT 3. Kch nt Close ng hp thoi Data Adapter Preview (xem trc B tip hp d liu). Tip theo, bn cn to ra mt i tng Dataset. Bn s dng mt i tng Dataset lu tr mt bn sao cc b v thng tin c ct gi trong c s d liu. Mt i tng Dataset c th i din cho nhng cu trc c s d liu nh nhng bng, nhng hng, v nhng ct v..v.. Trong v d ny, bn s s dng mt i tng Dataset d tr nhng hng t bng nhng khch hng . 1. Kch mt vng trn form ca bn bn ngoi DataGrid. 2. Kch mi lin kt Generate Dataset (pht sinh Dataset) gn y ca s nhng thuc tnh. Vic ny lm hin th hp thai Generate Dataset . 3. Chn nt New radio (rai mi) v chc chn rng trng bn phi ca nt rai ny cha DataSet1, nh trong hnh 6.15.

Hnh 6.15: Nhp vo nhng chi tit ca Dataset trong hp thoi pht sinh tp d liu Generate Dataset . 4. Kch nt Ok tip tc. iu ny thm mt i tng Dataset mi c tn dataSet11 vo form ca bn. Tip theo, bn s cn gn thuc tnh DataSource ca DataGrid ti i tng dataset ca bn. iu ny t ngun ca d liu cho DataGrid, cho php nhng hng t Dataset s c trnh by trong DataGrid ca bn. thit t thuc tnh DataSource, bn thc hin nhng bc sau y: 1. Kch i tng DataGrid ca bn v gn thuc tnh DataSource ti dataSet11. Customers. 2. By gi, bn s thm mt nt nhn, n s in y sqlDataAdapter1 vi nhng hng truy xut bi pht biu SELECT ca bn. chn Button t Toolbox v ko n ln trn form ca bn n v tr ngay bn di DataGrid ca bn. 3. Gn thuc tnh Text cho nt nhn ca bn l Run SELECT trong ca s nhng thuc tnh. c tr sqlDataAdapter1 vi nhng hng c truy xut bi pht biu SELECT, bn cn gi phng thc Fill() cho i tng ny. Phng thc ny s c gi khi nt c kch. thm m cn thit, thc hin nhng bc sau y: 1. Nhn p nt nhn bn thm trc . iu ny m ca s bin tp m v nh v tr con tr trong phng thc button1_Click() . 2. Nhp m sau y vo phng thc ny: dataSet11.Clear(); sqlDataAdapter1.Fill(dataSet11, "Customers"); Ghi ch: Bn cng c th gi phng thc Fill() trong s kin Form1_Load. S kin ny xut hin khi Form thot tin c ti. Tip theo, thm nt nhn khc m s cho php bn lu bt k s thay i no bn lm cho nhng hng trong DataGrid: 1. Tip tc v thm nt nhn khc v gn thuc tnh Text ca nt ny ti Update (cp nht). 3. Nhn p nt nhn ny v thm pht biu sau y vo phng thc button2_Click() :

sqlDataAdapter1.Update(dataSet11, " Customers "); Pht biu ny cp nht mt hng vi nhng gi tr ct mi m bn nhp vo trong DataGrid ca bn. By gi bn hon tt Form ca bn. Xy dng d n bi chn Build Build Solution. Cui cng, bn sn sng chy Form ca bn! Thc hin nhng bc sau y: 1. Chn Debug Start without Debugging khi chy Form ca bn. 2. Kch nt "Run SELECT" trn Form ca bn chy pht biu SELECT ca bn. iu ny truy xut nhng hng t bng nhng khch hng v trnh by chng trong DataGrid trn form ca bn. 3. Sa i ct CompanyName ca hng u tin thnh "Alfreds Futterkiste Shoppe " v kch nt Update; vic ny giao ph s thay i bn thc hin ti hng trong bng nhng khch hng (xem Hnh 6.16).

Hnh 6.16: Form ang chy 4. Thit t li CompanyName cho hng u tin tr li nguyn bn trc bi loi b "Shoppe" t phn cui v kch Update li ln na. Trong mc k tip, bn hc cch s s dng "VS .NET Data Form Wizard" to ra mt ng dng Windows tin tin hn truy cp c s d liu Northwind my ch phc v SQL.

S dng Data Form Wizard to ra mt form Windows


Trong mc ny, bn s s dng VS .NET Data Form Wizard to ra mt ng dng Windows truy cp c hai bng Customers v Orders . Bng Orders cha nhng hng i din cho nhng n t c t bi nhng khch hng. Nhng hng trong bng Orders lin quan n nhng hng trong bng Customers thng qua mt kha ngoi : Bng Orders cha mt ct c tn CustomerID l mt kha ngoi lin kt ti ct CustomerID ca bng Customers (CustomerID l kha chnh cho bng Customers ). S s dng ca kha ngai l nh ngha mt mi quan h cha con gia nhng bng Customers v Orders . Form m bn s to ra trnh by mt hng t bng nhng khch hng, cng vi bt k hng no c lin quan t bng Orders . cho bn mt tng r rng v mc ch cui cng ca n, Hnh 6.17 trnh by y hnh nh form ang chy. Ch phn nh ca form trnh by chi tit cho hng t bng Customers c CustomerID l ALFKI; phn y ca form cha mt iu khin DataGrid trnh by nhng hng t bng Orders cho khch hng ny. Khi bn di chuyn ti hng k tip trong bng nhng khch hng, nhng hng t bng Orders cho khch hng k tip c t ng thay i theo trong DataGrid.

Hnh 6.17: Form ang chy Thc hin nhng bc ny bt u xy dng Form: 1. La chn File New Project. 2. Trong hp thoi New Project , chn Empty Project, v nhp DataFormWindowsApplication trong trng Name. V bn s c thm mt Form mi vo ng dng mi ca bn khng lu na, khng c yu cu no VS .NET pht sinh form trng nh thng l cho bn; l do l bn ang to ra mt d n trng . 3. Kch OK tip tc. VS .NET s to ra mt d n trng mi cho bn. Tip theo, bn s s dng Data Form Wizard to ra mt form truy cp nhng bng Customers v Orders trong c s d liu Northwind. 1. Chn Project Add New Item. 2. Chn Data Form Wizard t mc Templates (nhng khun mu) bn phi, nhp tn ca Form l MyDataForm.cs, v kch Open (xem Hnh 6.18). Bn s thy trang welcome cho Data Form Wizard.

Hnh 6.18: Thm mt from d liu s dng Data Form Wizard 3. Kch nt Next tip tc. 4. By gi bn nhp i tng Dataset bn mun s dng trong form ca bn. Bn c th nht mt Dataset ang tn ti, hoc bn c th to ra mt Dataset mi. V y l mt d n mi, bn s to ra mt Dataset mi. Nhp myDataSet nh mt tn cho Dataset ca bn, nh trnh by trong Hnh 6.19.

Hnh 6.19: Nhp tn ca dataset mi 5. Kch nt Next tip tc. 6. By gi bn phi chn mt data connection (kt ni d liu) truy cp c s d liu. Bn c th chn mt kt ni c, hay bn c th to ra mt kt ni mi. Chn kt ni ca bn, nh trnh by trong Hnh 6.20-tt nhin, tn kt ni ca bn c th s khc vi trong sch ny.

Hnh 6.20: Chn kt ni d liu 7. Kch nt Next tip tc. 8. By gi bn ng nhp vo c s d liu bi ghi r mt khu cho ngi s dng c s d liu. Bn s dng ngi s dng "sa" khi to ra kt ni c s d liu trc , v do bn cn nhp mt khu cho ngi s dng ny, nh trnh by trong Hnh 6.21.

Hnh 6.21: ng nhp ti c s d liu Northwind my ch phc v SQL 9. Kch nt Ok tip tc. By gi bn chn nhng bng c s d liu hay nhng views bn mun s dng trong form ca bn. Vng bn tri y ca hp thoi trnh by nhng bng v nhng views bn c th truy cp s dng form ca bn. Vng bn phi y hp thoi trnh by nhng bng v nhng views m bn thm vo . Bn thm mt bng hay view vo form ca bn bi chn n t vng bn tri v kch nt mi tn tr v bn phi. Mo nh: Bn cng c th nhn p trn bng hay view thm chng vo form ca bn. Khi bn lm iu ny, bng hay view di chuyn ti bn phi, cho bit bn chn chng s dng trong form ca bn. Nu bn quyt nh khng mun s dng mt bng hay view, bn hy chn chng s dng nt mi tn ch tri. Bn cng c th nhn p bng hay view b chn chng. Chn nhng bng Customers v Orders , nh trnh by trong Hnh 6.22. Kch nt Next tip tc.

Hnh 6.22: chn nhng bng Customers v Orders s dng trong form Bi v bn chn hai bng- Customers v Orders- bc tip theo bn s nh ngha mt mi quan h gia nhng bng . Mi quan h ny c s dng trong form ca bn ng b ha s dn hng gia nhng hng trong bng Customers vi nhng hng trong bng Orders : khi bn di chuyn ti mt hng k tip trong bng Customers, nhng hng t bng Orders s c trnh by trong form ca bn. thc hin nhng vic sau y trong hp thoi ( xem Hnh 6.23): 1. Nhp myRelationship vo trng Name. 2. Chn Customers nh bng cha . 3. Chn Orders nh bng con. 4. Chn CustomerID nh kha cho mi bng. Cnh bo: thm mi quan h vo form ca bn, kch nt mi tn ch phi. Nu bn khng lm iu ny, mi quan h ca bn s khng c thm vo form. 5. Kch nt Next tip tc. 6. Chn nhng ct t nhng bng bn mun hin th trong form ca bn. V bn thm nhng bng Customers v Orders vo form ca bn, nn bn s chn nhng ct trnh by t hai bng ny. Theo mc nh, tt c nhng ct t nhng bng chn s c hin th. Bn s khng trnh by tt c nhng ct t hai bng ny. B chn ct City cho bng Customers. (Sau ny, bn s thy cch thm ct ny vo form ca bn nh th no bng tay.) 7. B chn nhng ct sau y cho bng Orders : RequiredDate ShippedDate ShipVia Freight ShipAddress ShipCity ShipRegion ShipPostalCode

ShipName

ShipCountry

Hnh 6.23: to ra mt mi quan h gia hai bng Ghi ch: ghi nh: Bn ang b chn nhng ct ny, v vy bn hy chn nhng ct cho bng Orders. Hnh 6.24 trnh by hp thoi y vi nhng ct c chn hin th t mi bng.

Hnh 6.24: Chn nhng ct hin th t mi bng 8. Kch nt Next tip tc. 9. Chn kiu trnh by cho nhng hng (cng c bit n nh nhng bn ghi (records)) trong bng cha s c trnh by trong form ca bn. Bn c th hin th nhng hng trong mt khung li, hay bn c th trnh by mi ct s dng mt iu khin ring bit. Bn s s dng mt iu khin ring bit cho nhng ct, v vy chn "Single Record" (bn ghi n) trong nt radio "individual controls" . Nhng hp kim khc trong hp thoi cho php bn chn nhng iu khin bn mun thm vo form. Nhng iu khin ny nh hng n nhng hng trong bng ch, v bn c th thm nhng iu khin sau y vo form ca bn: Ghi ch: Trong v d ny, bng cha l bng Customers , v bng con l bng Orders . Nhng hng cho bng con c trnh by trong mt iu khin DataGrid. Cancel All : nt Cancel All cho php bn hu bt k s thay i no bn lm ti hng hin thi. Add: nt Add cho php bn thm mt hng mi. Delete : nt Delete cho php bn xa hng hin thi. Cancel : nt Cancel cho php bn hy b mt s thay i c lm ti hng hin thi. Navigation Controls : nhng iu khin dn hng gm c bn nt n cho php bn di chuyn ti hng u tin, hng k trc, hng k tip, v hng cui cng. Mt ch bo cng c trnh by cho thy hng hin thi. Hnh 6.25 cho thy hp thoi y .

Hnh 6.25: chn kiu trnh by 10. By gi Bn c hon thnh tt c nhng bc trong Data Form Wizard. Kch nt Finish to form ca bn. VS .NET by gi s trnh by form mi, nh trong Hnh 6.26.

Hnh 6.26: form y Nhng i tng managed provider (b cung cp c qun l) trong form ca bn s dng nhng lp OLE DB c cha trong namespace System.Data.OleDb - Mc d mt c s d liu SQL Server c s dng. Nhng i tng ny lm vic vi bt k c s d liu tng hp DB OLE no. M s hiu qu hn nu nhng lp "b cung cp c qun l" trong khng gian tn System.Data.SqlClient c s dng thay vo ; nhng

lp ny c bit cho s s dng vi mt c s d liu SQL Server. y l ci gi ca s s dng VS .NET wizard pht sinh m cho bn. Trong mc k tip, bn s hc v nhng iu khin text-box trong form ca bn truy cp nhng ct trong bng Customers nh th no .

S kt buc D liu
Mi iu khin text-box trong phn trn ca form ca bn c kt buc ti mt ct trong bng nhng khch hng s dng mt qu trnh c bit nh "s kt buc d liu" (data binding). Khi mt iu khin c kt buc vi mt ct trong mt i tng dataset, gi tr cho ct ny c trnh by trong iu khin thng qua thuc tnh Text trong nhm DataBindings. Thuc tnh Text trong nhm DataBindings gn vn bn trnh by trong mt iu khin. kho st hay thit t s kt buc d liu cho mt iu khin, bn chn iu khin trong ca s thit k form v tri rng nhng thuc tnh DataBindings trong ca s nhng thuc tnh. Bn s thy nhng thuc tnh ny trong vng D liu ca ca s nhng thuc tnh. Tip theo, bn s thy hp text box cho Customer ID c gn nh th no. Chn hp vn bn bn phi ca nhn CustomerID trong form ca bn; hp vn bn ny c tn l editCustomerID . Chc chn rng nhng thuc tnh DataBindings c m rng trong ca s nhng thuc tnh. Cui cng, kch danh sch x xung cho thuc tnh Text xem ct hin thi m ti hp vn bn kt buc n. Nh bn c th nhn thy t Hnh 6.27, editCustomerID c kt buc vi ct CustomerID ca bng nhng khch hng. iu ny c ngha l khi bn chy form v ti d liu t c s d liu, gi tr ct CustomerID s c trnh by trong hp vn bn editCustomerID.

Hnh 6.27: hp vn bn editCustomerID c kt buc vi ct CustomerID Trong mc k tip, bn s thm mt iu khin nhn v mt hp text-box hin th ct City trong form ca bn.

Thm nhng iu khin vo Form


Khi bn chy Data Form Wizard trc to ra form ca bn, bn s nh li l ti ni bn hy chn ct City ca bng nhng khch hng v vy n khng xut hin trn form ca bn. Ti yu cu bn lm iu ny

by gi bn c th thy cch thm mt iu khin bng tay v kt buc n vo ct City nh th no. nh vy, bn c th thy cch xy dng nhng form ca mnh v n truy nhp c s d liu nh th no. i theo nhng bc ny thm mt nhn v mt hp vn bn vo form ca bn: 1. Thm mt nhn bn di nhn Address trong form ca bn. t thuc tnh Name cho nhn mi ca bn ti lblCity. 2. t thuc tnh Text cho nhn ti City. 3. Tip theo, thm mt text box bn di hp text box editAddress. 4. t thuc tnh Name cho hp Text box mi ca bn ti editCity. 5. Loi b vn bn mc nh c sn trong thuc tnh Text (thuc tng text s thnh trng). Tip theo, bn cn kt buc editCity ti ct City ca bng Customers. lm iu ny, bn m nhng thuc tnh DataBindings v gn thuc tnh Text bi chn City t bng nhng khch hng, nh c trnh by trong Hnh 6.28.

Hnh 6.28: Kt buc ct City ti hp vn bn editCity Trong mc k tip, bn s thm mt phng thc Main() vo m ca Form ca bn.

Thm phng thc Main()


Nh bn bit, tt c cc chng trnh u phi c mt phng thc Main() . Phng thc Main() c thc thi khi bn chy chng trnh ca bn. Trong mc ny, bn s thm mt phng thc Main() vo form ca bn. lm iu ny, chn View Code, v thm phng thc Main() sau y vo bn trong lp MyDataForm ca bn ( Mt v tr tt thm Main() s l ni bt u ca lp MyDataForm ca bn sau du mc { ): public class MyDataForm : System.Windows.Forms.Form { public static void Main()

{ Application.Run(new MyDataForm()); } ... M ny to ra mt i tng mi ca lp MyDataForm, gy ra form ca bn s c trnh by trn mn nh.

t Mt khu
Trc khi bn c th chy Form ca bn, bn cn t mt khu cho ngi s dng c s d liu trong thuc tnh ConnectionString ca i tng kt ni d liu. i tng ny t ng c to ra bi VS .NET khi bn chy Data Form Wizard, v i tng c tn mc nh oleDbConnection1. sa i thuc tnh ConnectionString cho oleDbConnection1, Chn oleDbConnection1 t danh sch x xung trong ca s nhng thuc tnh. Tip theo thm chui pwd= sa vo thuc tnh ConnectionString , nh trnh by trong Hnh 6.29.

Hnh 6.29: t thuc tnh ConnectionString By gi Bn sn sng chy form ca bn.

Chy Form
chy form ca bn, chn Debug Start without Debugging. Hnh 6.30 cho thy form ang chy. Bn kch nt Load trnh by nhng hng t nhng bng nhng khch hng v nhng n t trong form ca bn.

Hnh 6.30: Form ang chy Ghi ch: Bn s nhn thy mt Windows console xut hin trong nn. ng quan tm n n. Ch l phn trn ca form trng by nhng chi tit cho hng t bng nhng khch hng c CustomerID l ALFKI; phn di ca form cha mt iu khin DataGrid trnh by nhng hng t bng nhng n t cho khch hng ny. Khi bn di chuyn ti hng k tip trong bng nhng khch hng, nhng hng t bng nhng n t cho khch hng ny t ng c trnh by trong DataGrid. C thoi mi th nghim nhng nt khc trn form ca bn thm, sa i, v xa b nhng hng trong bng nhng khch hng. Bn cng c th s dng iu khin DataGrid thm, sa i, v xa nhng hng t bng Orders cho khch hng hin thi.

Tm lc
Trong chng ny, bn hc cch to ra nhng chng trnh Windows s dng Visual Studio .NET nh th no. Windows cung cp nhng phn t th nh nhng thc n, nhng hp vn bn, nhng nt rai, cho php bn xy dng mt giao din trc quan m nhng ngi s dng nhng chng trnh ca bn s tm ra mt cch d dng cch s dng chng. Bn thy cch s dng mt iu khin DataGrid truy nhp nhng hng trong mt bng c s d liu nh th no. Bn cng hc cch s dng Visual Studio .NET Data Form Wizard to ra mt ng dng Windows truy cp c nhng bng Customers v Orders cng lc nh th no. Trong phn II, " Lp trnh c s d liu c bn vi ADO.NET, " Bn s kho st nhng chi tit v nhng lp khc nhau ca ADO.NET v bn s thy cch lm vic vi mc su hn vi ADO.NET nh th no. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

You might also like