asp.net with c#sci.udru.ac.th/websci/download/com/rewadee/programweb/ado.pdf · อ.เรวดี...
TRANSCRIPT
อ.เรวด พพฒนสงเนน
ASP.NET with C#
ADO.NET
อ.เรวด พพฒนสงเนน
ADO.NET คอ?
• ADO.NET นนกคอกลมของออปเจกตภายใตเนมเสปซ System.Data ซงจะท าหนาทเปนสอกลางระหวาง โปรแกรมทพฒนาดวยสถาปตยกรรม .NET Framework กบ “แหลงขอมล” ซงในทน อาจจะหมายถง ไฟลฐานขอมลของ Access ไฟล Excel ก และยงหมายรวมไปถง ระบบจดการฐานขอมลโดยเฉพาะอยางเชน Microsoft SQL Server หรอวา Oracle เปนตน
อ.เรวด พพฒนสงเนน
ADO.NET คอ?• ADO.NET นน ไดรบการปรบปรงจาก ADO เวอรชนกอน ใหสนบสนนการ
ท างานทงแบบ Connected และ Disconnected ซงแตเดมนน จะสนบสนนเพยงการท างานแบบ Connected หรอ แบบเชอตอกบแหลงขอมลตลอดเวลาเทานน
• ดวยการท างานแบบ Disconnected คณจงสามารถทจะปดการตดตอกบแหลงขอมล ในขณะทท าการเรยกด หรอท าการแกไขขอมล และยงสามารถท าการจดเรยง (Sort) ขอมล หรอแมกระทง Filter ขอมลเพอการแสดงผลได เปนการชวยประหยดทรพยากรระบบ โดยเฉพาะอยางยง เมอเปนการท างานรวมกบระบบจดการฐานขอมลอยาง Microsoft SQL Server หรอ Oracle ทเปนการตดตอกนระหวางโปรเซสของ ASP และโปรเซสของตวระบบจดการฐานขอมล หรอ การตดตอกนระหวางเครองเซรฟเวอร 2 เครอง
อ.เรวด พพฒนสงเนน
โครงสรางของ ADO.NET
สามารถแบงออกไดเปน 2 กลม คอ
• กลมทท างานกบขอมลบนหนวยความจ า หรอท างานแบบ Disconnected
• กลมทท างานกบแหลงขอมลโดยตรง หรอท างานแบบ Connected
อ.เรวด พพฒนสงเนน
ADO.NET (Disconnected)
• คลาสกลมน จะเปนกลมทใชในการจ าลองโครงสรางของขอมล ใหมลกษณะคลายคลงกบขอมลจรงทถกเกบอยในฐานขอมลใหมากทสด โดยการจ าลอง ตาราง (Table) ฟลด (Field) และเรคคอรด (Record) หรอแมกระทงความสมพนธระหวางตาราง (Data Relation) จากแหลงขอมล มาไวในหนวยความจ าหลก ซงผพฒนาจะสามารถเรยกใช และแกไขขอมลทอยในคลาสกลมนได เสมอนวาก าลงท างานกบฐานขอมลจรง กอนทจะท าการ Update ขอมลจากคลาสเหลาน กลบไปยงแหลงขอมล
อ.เรวด พพฒนสงเนน
ADO.NET (Connected)
• คลาสในกลมนจะเปนคลาสทท าการสราง Connection กบแหลงขอมลโดยตรง ไมวาจะเปนไฟล หรอ ระบบจดการฐานขอมลกตาม และท าการอาน หรอแกไขขอมลไปยงแหลงขอมลนน ซงในคลาสกลมนจะเกยวของกบการเปด Connection ไปยงระบบจดการฐานขอมล และการใชค าสง SQL เพอท าการเรยกด หรอวาแกไขขอมล โดยคลาสกลมน จะมชอเรยกเปนทางการวา .NET Data Provider
อ.เรวด พพฒนสงเนน
ADO.NET
อ.เรวด พพฒนสงเนน
แนวทางการพฒนา ASP.NET กบ ADO.NET
อ.เรวด พพฒนสงเนน
.NET Framework Data Provider
แหลงขอมล Namespace ของ Provider
SQL Server System.Data.sqlClient
OLE DB System.Data.OleDb
ODBC System.Data.Odbc
Oracle System.Data.OracleClient
Entity Client System.Data.EntityClient
อ.เรวด พพฒนสงเนน
กลมออบเจกตหลกของสถาปตยกรรม ADO.NET
OleDbConnection SqlConnection
OleDbCommand OleDbDataAdapter SqlDataAdapter SqlCommand
OleDbDataReader SqlDataReaderDataSet
อ.เรวด พพฒนสงเนน
หนาทของแตละออบเจกต
OLEDB Data Providerท าหนาทเขาถงขอมลในฐานขอมล ใชงานรวมกบฐานขอมล MS Access
SQL Server Data Provider ท าหนาทเขาถงขอมลในฐานขอมล ใชงานรวมกบ
ฐานขอมล MS SQL Server
ออบเจกตทใชเกบผลการท างาน
อ.เรวด พพฒนสงเนน
Object หลกของ .NET Provider
Object หนาท และ คลาส
Connection ท าหนาทเชอมตอไปยงแหลงขอมล /คลาส DbConnection
Command รนค าสงทมผลตอแหลงขอมล /คลาส DbCommand
DataReader อานขอมลจากแหลงขอมลโดยตรง แบบอานไปขางหนาอยางเดยว /คลาส DbDataReader
DataAdapter กระท ากบขอมลใน DataSet แลวคอย update กลบไปยงแหลงขอมล / คลาส DbDataAdapter
อ.เรวด พพฒนสงเนน
Object หลกของ .NET Provider
Object หนาท และ คลาส
Transaction กระท ากบขอมลในแหลงขอมลแบบ Transaction /คลาส DbTransaction อยใน namespace :System.Transactions
CommandBuilder ชวยสรางค าสงคณสมบตจากDataAdapterหรอ /คลาส CommandBuilder
ConnectionStringBuilder
ชวยในการแกไข และจดการstring /คลาส DbConnectioStringBuilder
Parameter นยาม input หรอ output ทสงคาคนกลบจากค าสงหรอ store procedure / คลาส DbParameter
อ.เรวด พพฒนสงเนน
Namespace ทเรยกใชงาน
„กลมออบเจกต OLEDB Data Provider อยในเนมสเปซ System.Data.OleDb„กลมออบเจกต SQL Server Data Provider อยในเนมสเปซ System.Data.SqlClient„ออบเจกต Data Set อยในเนมสเปซ System.Data
อ.เรวด พพฒนสงเนน
กลมออบเจกต OLEDB Data Provider
WinForm Apps WebForm Apps
สวนแสดงผล User Interface -UI
DataSet
DataTable DataTable
OleDb.NET Data Provider
OleDb Command
OleDb DataAdapter
OleDbConnection
DataReader
Database
อ.เรวด พพฒนสงเนน
กลมออบเจกต SQL Server Data Provider
WinForm Apps WebForm Apps
สวนแสดงผล User Interface -UI
DataSet
DataTable DataTable
SQL Server.NET Data Provider
Sql Command Sql DataAdapter
OleDbConnection
DataReader
Database
อ.เรวด พพฒนสงเนน
ขนตอนการตดตอฐานขอมลโดยใชออบเจกตกลมOLEDB
• อยในเนมสเปซ System.Data.OleDb
• OleDbConnection class
• OleDbCommand class
• OleDbDataAdapter class
• OleDbDataReader class
อ.เรวด พพฒนสงเนน
ขนตอนการตดตอฐานขอมลโดยใชออบเจกตกลมSQLServer
• อยในเนมสเปซ System.Data.sqlClient
• sqlConnection class
• sqlCommand class
• sqlDataAdapter class
• sqlDataReader class
อ.เรวด พพฒนสงเนน
DbConnection class
ConnectionString ขอความค าสงทใชในการเปดฐานขอมลConnectionTimeOut รบคาเวลาทรอในขณะท าการตดตอกบ
ฐานขอมล ถาครบก าหนดเวลาจะหยดการตดตอและแสดงขอผดพลาด
State สถานการณตดตอฐานขอมล
„ 0 = disconnected
„ 1 = connected
Property ทส าคญท าหนาทในการเปดการเชอมตอกบฐานขอมล
อ.เรวด พพฒนสงเนน
DbConnection class(ตอ)
DbConnection()DbConnectio(string) string : ขอความทใชในการตดตอ
ฐานขอมล
Constructor
Open() เปดการเชอมตอกบฐานขอมลClose() ปดการเชอมตอกบฐานขอมล
Method ทจ าเปน
อ.เรวด พพฒนสงเนน
ตวอยางการเชอมตอดวย OleDbConnection class
//ก ำหนด Connection string string strCon= “Provider = Microsoft.JET.OleDb.4.0;
Data Source=ต ำแหนงไฟลฐำนขอมล” ; User =ชอผใช ; Password = รหสผำน”
//สรำงออบเจกต connOleDbConnection conn As New OleDbConnection();conn.ConnectionString = strCon;conn.Open(); //เปดกำรเชอมตอฐำนขอมล
อ.เรวด พพฒนสงเนน
ตวอยางการเชอมตอดวย sqlConnection class
//ก ำหนด Connection string string strCon= “Data Source=“ชอเซรฟเวอรฐำนขอมลฐำนขอมล” ;Initial catalog=“ชอฐำนขอมล” User =ชอผใช ; Password = รหสผำน; Integrated Security=true”
//สรำงออบเจกต connsqlConnection conn As New sqlConnection();conn.ConnectionString = strCon;conn.Open(); //เปดกำรเชอมตอฐำนขอมล
อ.เรวด พพฒนสงเนน
Connection string (MS SQL Server)
• Standard security
• ตวอยาง
Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
string strCon = “Data Source=Rewadee;Initial Catalog=Northwind;User Id=sa; Password=1234;”
อ.เรวด พพฒนสงเนน
Connection string (MS SQL Server)
• Trusted Connection
• ตวอยาง
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;
string strCon = “Data Source=Rewadee;Initial Catalog=Northwind; Integrated Security=SSPI;”
อ.เรวด พพฒนสงเนน
Connection string (MS SQL Server)
• Connect via an IP address
• ตวอยาง
Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;
string strCon = “Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=Northwind;User ID=sa;Password=1234;”
***หมายเลขพอรต 1433 เปน default port ของ MS SQL Server
อ.เรวด พพฒนสงเนน
Connection string (MS SQL Server)
• Attach a database file on connect to a local SQL Server Express instance
• ตวอยาง
Server=.\SQLExpress; AttachDbFilename= path of database file; Database=dbname; Trusted_Connection=Yes;
string strCon = “Server=.\SQLExpress; AttachDbFilename = c:\test\mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;”
อ.เรวด พพฒนสงเนน
DbCommand class
CommandText ขอความค าสงSQL หรอ StoreProcedure ทจ าประมวลผล
CommandTimeOut ก าหนดเวลาทรอในขณะท าการประมวลผล ถาครบก าหนดเวลาจะแสดงขอผดพลาด
CommandType ระบชนดของ CommandText ทจะประมวลผล
Connection ระบการเชอมตอกบฐานขอมล
Property ทส าคญ
ท าหนาทก าหนดค าสง SQL หรอ StoreProcedure ทจะประมวลผลในฐานขอมล
อ.เรวด พพฒนสงเนน
OleDbCommand class(ตอ)
DbCommand()
DbCommand(string) string : ค าสง SQL หรอ StoreProcedure
DbCommand(string , DbConnection)
DbConnection : การเชอมตอฐานขอมล
DbCommand(string , DbConnection , DbTransaction)
Constructor
อ.เรวด พพฒนสงเนน
OleDbCommand class
OleDbCommand cmd = New OleDbCommand();
cmd.Connection = conn ;
cmd.CommandText = “Select * From Products”;
cmd.CommandTimeOut = 90;
cmd.CommandType = CommandType.Text;
อ.เรวด พพฒนสงเนน
sqlDbCommand class
sqlDbCommand cmd = New sqlDbCommand();
cmd.Connection = conn ;
cmd.CommandText = “Select * From Products”;
cmd.CommandTimeOut = 90;
cmd.CommandType = CommandType.Text;
อ.เรวด พพฒนสงเนน
DataAdapter class
DbDataAdapter()
DbDataAdapter(OleDbCommand)
DbDataAdapter(string , OleDbConnection)
DbDataAdapter(String , String)
Constructor
ท าหนาทเกบชดค าสงและการเชอมตอฐานขอมลทจะใชในการก าหนดขอมลใหแก DataSet และ update Data Source
อ.เรวด พพฒนสงเนน
bDataAdapter class(ตอ)
InsertCommand ก าหนดค าสง SQL หรอ StroreProcedure ทจะเพมรายการขอมลใหมลงใน Data Source
DeleteCommand ก าหนดค าสง SQL หรอ StroreProcedure ทจะลบรายการขอมลจาก Data Source
UpdateCommand ก าหนดค าสง SQL หรอ StroreProcedure ทจะแกไขรายการขอมลใน Data Source
Property ทจ าเปน
Method ทจ าเปนFill เพม หรอ ปรบปรง(refresh) ขอมลใน DataSet
Update ปรบปรง(refresh) ขอมลใน DataSet
อ.เรวด พพฒนสงเนน
OleDbDataAdapter class
DataSet ds = New DataSet();
OleDbDataAdapter da = New OleDbDataAdapter(“Select * from Products” , conn);
da.Fill(ds , “Products”);
อ.เรวด พพฒนสงเนน
sqlDbDataAdapter class
DataSet ds = New DataSet();
sqlDbDataAdapter da = New sqlDbDataAdapter(“Select * from Products” , conn);
da.Fill(ds , “Products”);
อ.เรวด พพฒนสงเนน
DataReader class
DataReader()
DataReader(OleDbCommand)
DataReader(string , OleDbConnection)
DataReader(String , String)
Constructor
ท าหนาทอานขอมลแบบ Forward-only ของ แถวขอมลจาก Data Source (อานครง 1 เรคคอรด)
อ.เรวด พพฒนสงเนน
DataReader class
FieldCount จ านวนคอลมนในรายการขอมลปจจบน
HasRows บอกวาจ านวนรายการขอมลตงแต 1 รายการขนไป
RecordsAffected จ านวนรายการขอมลทมผลกบค าสงSQL
Property ทจ าเปน
Method ทจ าเปนClose ปดออบเจกตของ OleDbDataReader
Read เลอนออบเจกต OleDbDataReader ไปยงรายการตอไป
อ.เรวด พพฒนสงเนน
OleDbDataReader class
string sql = “Select * from Products where ProductId = 77”;
OleDbCommand com = New OleDbCommand();
OleDbDataReader dr = New OleDbDataReader();
DataTable dt = New DataTable();
อ.เรวด พพฒนสงเนน
sqlDataReader class
string sql = “Select * from Products where ProductId = 77”;
sqlCommand com = New sqlCommand();
sqlDataReader dr = New sqlDataReader();
DataTable dt = New DataTable();
อ.เรวด พพฒนสงเนน
DataSet class
DataSet()
DataSet(string) String : เปนชอชดขอมลภายใน DataSet
DataSet(SerializationInfo , StreamingContext)
Infrastructure
DataSet(SerializationInfo , StreamingContext , Boolean)
Infrastructure
Constructorท าหนาทเกบชดขอมลทไดจากออบเจกต OleDbDataAdapter
อ.เรวด พพฒนสงเนน
DataSet class(ตอ)
Tables ชดของตารางขอมลทบรรจอยใน DataSet
Property ทจ าเปน
Method ทจ าเปนClear เคลยร DataSet โดยลบขอมลออกจากตารางภายใน
DataSet
Clone คดลอกโครงสรางของ DataSet ทงหมด
อ.เรวด พพฒนสงเนน
DataReader vs DataSet• ออบเจกต DataReader และ DataSet ท าหนาทในการเกบ
ขอมลทอานออกมาจากแหลงขอมล
• เชน จากตารางขอมลโดยอาศยชดค าสง SQL หรอ จากแหลงขอมล XML เปนตน
อ.เรวด พพฒนสงเนน
DataReader vs DataSet (ตอ)• ออบเจกต DataReader อานขอมลทละ 1 เรคคอรดออกมา ม
สถานะการเคลอนทไปขางหนาอยางเดยว (Forward-only) สวนใหญเกดจากการรนค าสง SQL ของ ออบเจกต Command
• ตวอยางเชน ควรขอมลออกมาเปนชด โดยไมตองการอานขอมลทงหมดมาเกบไวทหนวยความจ า(RAM) แตตองการอานขอมลมาใชงานทละ 1 เรคคอรด
อ.เรวด พพฒนสงเนน
DataReader vs DataSet (ตอ)• ออบเจกต DataSet อานขอมลทงหมดทควรดวยค าสง SQL มา
เกบไวในหนวยความจ า จากนนจงน าไปใชในรปแบบตาง ๆ ตามตองการ
• ดงนน จงสามารถจดการกบขอมลทเกบอยใน DataSet ไดมากกวาใน DataReader
อ.เรวด พพฒนสงเนน
DataReader vs DataSet (ตอ)• ออบเจกต DataReader เกดจากสถาปตยกรรม Connected
หมายถง มการเชอมตอกบฐานขอมลตลอดเวลา ดงนนเมอใชงานออบเจกต DataReader เสรจแลว ตองควบคมการเปด-ปด ออบเจกต DataReader เองทงหมด เพราะไมสามารถเปดออบเจกต DataReader ไดเกน 1 ครงในเวลาเดยวกน
• ออบเจกต DataSet เกดจากสถาปตยกรรม Disconnectedหมายถง เมอควรขอมลมาเกบไวใน DataSet แลว จะตดการเชอมตอกบแหลงขอมลโดยทนท