Professional Documents
Culture Documents
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 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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.
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.
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 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 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.
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 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
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.
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.
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.
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.
); // 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 .
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.
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.
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.
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. $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
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.
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.
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.
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
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.
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.
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 ".
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
CompanyName nvarchar
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
ShipPostalCode ShipCountry
nvarchar nvarchar
10 15
Yes Yes
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
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.
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.
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')
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.
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.
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.
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
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 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.
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;
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.
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);
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';
Ch thch: bn c th s dng t kha NOT o ngc ngha ca nhng tan t khc, th d , NOT LIKE, NOT IN.
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: 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: 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
Hnh 3.15: S dng t kha TOP truy xut 10 sn phm u tin bi ProductID
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.
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';
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
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 );
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';
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.
'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.
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."
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;
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.
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.
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 */
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
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.
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).
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.
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
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
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
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.
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.
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.
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.
SIGN(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);
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.
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');
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();
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
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;
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.
-- 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.
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.
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
/* 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
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
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 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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.
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 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.
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.
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 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.
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.
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.
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 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 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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@