ASP .NET cơ sở dữ liệu với ADO .NET
Trang 1Truy cập dữ liệu với ADO.NET
Hà Đồng Hưng
Trang 4• Cũng có thể dùng ADO.NET cho sự phân cấp, cache dữ liệu
để làm việc với dữ liệu offline
Trang 5Tại sao là công nghệ truy cập dữ liệu mới?
• Data Access Objects (DAO)
– Được thiết kế để tương tác với các csdl dựa trên file cục bộ
• Remote Data Objects (RDO)
– Một tầng truy cập dữ liệu nhanh, nhe được thiết kế để tương tác với các csdl lớn hơn dựa trên server (SQL Server, Oracle…)
Trang 6Các hạn chế của các công nghệ cũ
• Vấn đề:
– Người phát triển cần phải xây dựng các ứng dụng mạnh mẽ hơn
• Làm việc với dữ liệu dạng XML
• Có thể chuyển các đối tượng Recordset của ADO giữa các tầng khác nhau của ứng dụng, nhưng không thể kết hợp nội dung các đối tượng Recordset
• …
– Các phiên bản ADO gần đây đã thêm các thành phần XML, nhưng ADO sẽ không bao giờ xữ lý dữ liệu XML hiệu quả bằng ADO.NET)
Trang 7Mô hình ADO.NET
• ADO.NET được thiết kế để giúp các nhà phát triển xây dựng hiệu quả các ứng dụng csdl đa tầng qua intranet và Internet
Trang 8Mô hình ADO.NET
• Thành phần hướng không kết nối của mô hình đối tượng
ADO.NET không giao tiếp không tương tác trực tiếp với các đối tượng kết nối
• Một sự chuyển đổi lớn từ các mô hình đối tượng truy cập dữ liệu trước của Microsoft
– Trong ADO, đối tượng Recordset lưu trữ kết quả truy vấn
– Gọi phương thức Open để nạp các kết quả truy vấn
– Gọi phương thức Update để đệ trình sự thay đổi trong Recordset lên csdl
• DataSet ADO.NET có thể só sánh về chức năng với ADO
Recordset
– Tuy nhiên, DataSet không tương tác trực tiếp với csdl
– Để nạp dữ liệu từ csdl vào DataSet, Hãy chuyển DataSet vào phương thức Fill của một đối tượng ADO.NET đã kết nối - DataAdapter
Trang 9Các trình cung cấp dữ liệu NET
(.NET Data Providers )
Các trình cung cấp dữ liệu NET
(.NET Data Providers )
• SQL Client NET Data Provider
– Tương tác với csdl SQL Server, version 7+
• OLE DB NET Data Provider
– Tương tác với nhiều dạng lưu trữ dữ liệu thông qua OLE DB
providers
• Mỗi NET data provider cài đặt các lớp cơ sở giống nhau
– Các lớp cơ sở: Connection, Command, DataReader, Parameter, Transaction
– Tên thực của chúng phụ thuộc vào trình cung cấp dữ liệu (provider)
Trang 11• Các Đối tượng hướng không kết nối (Disconnected Objects)
– Danh sách Đối tượng– Demo
– Sử dụng trong VS.NET
Trang 12Sử dụng các đối tượng ADO.NET
Trang 13Các đối tượng hướng kết nối
• Đối tượng Connection:
– Dùng để kết nối và ngắt kết nối với csdl
• Đối tượng Command
– Trình bày một truy vấn csdl (lấy, sửa đổi…), một lời gọi stored procedure, Một đề nghị (request) lấy về nội dung của một bảng (table) xác định
• Đối tượng DataReader (chỉ đọc dữ liệu)
– Được thiết kế để lấy và khảo sát các dòng trả về bởi từ câu truy vấn một cách nhanh chóng.
• Đối tượng Transaction
• Đối tượng Parameter
Trang 14Các đối tượng hướng kết nối
Trang 18strSql = "UPDATE Customers SET CompanyName = 'New'";
OleDB.OleDbCommand cmd = new OleDb.OleDbCommand(strSql, cn);
cmd.ExecuteNonQuery();
…//sql=Update…Set…Where
OleDb.OleDbCommand cmd = new OleDb.OleDbCommand(strSql, cn);
int intRecordsAffected = cmd.ExecuteNonQuery();
if (intRecordsAffected == 0)
Response.Write(“Update failed”);
else
Response.Write(“Update succeeded”);
Trang 19Connected Objects
Demonstrations Connected Objects
Demonstrations
• Thực hiện truy vấn trả về một giá trị đơn
strSQL = “SELECT COUNT(*) FROM KHACHHANG”;
OleDb.OleDbCommand cmd = new OleDb.OleDbCommand(strSql, cn); int intCustomers = (int)(cmd.ExecuteScalar());
• Thực hiện truy vấn có tham số
strSql = “SELECT * FROM KHACHHANG WHERE MaKH = @Ma”;
OleDbCommand cmd = new OleDbCommand(strSql, cn);
cmd.Parameters.Add("@Ma", “A1”);
OleDbDataReader rdr = cmd.ExecuteReader();
strSQL = “SELECT TenKH FROM KHACHHANG WHERE MaKH = ‘KH1’”; OleDb.OleDbCommand cmd As New OleDb.OleDbCommand(strSql, cn); String strCompanyName = cmd.ExecuteScalar().ToString();
Trang 20Connected Objects
Demonstrations Connected Objects
Demonstrations
• Thực hiệm một Stored Procedure
OleDbCommand cmd = new OleDbCommand(cn);
Trang 21– Nếu mở DataReader thứ hai trước khi đóng DataReader trước đó,
ta sẽ nhận được một ngoại lệ (exception) “requires an open and available connection.”
• Nếu ta muốn di chuyển tới và lui giữa các dòng kết quả, ta nên lưu trữ các dòng kết quả trong các đối tượng (DataSet)
Trang 23Create connection in VS.NET
• Ta có thể tạo kết nối đến Access, SQLServer, Oracle…
• Ta có thể modify (sửa), create (tạo), and delete (xóa) tables, views, stored procedures, database diagrams, and functions (hàm)
ACCESS
SQLServer
Trang 24Create connection in VS.Net
• Sử dụng connection (kết nối)
– Kéo và thả (connection) kết nối lên màn hình thiết kế
– Và SqlConnection1.Open (hoặc OleDbConnection1.Open)
tại nơi muốn mở kết nối
Trang 25Creating Commands in VS.NET
• Kéo và thả thành phần
Command từ Toolbox • Xác định một Connection
Trang 26– Demo– Sử dụng trong VS.NET
Trang 27Disconnected Objects
• Đối tượng DataSet
– Chứa đựng một tập dữ liệu (set of data)
– Chứa đựng một số các đối tượng DataTable
– Dữ liệu lưu trữ trong một đối tượng DataSet được ngắt kết nối vớicsdl
(database) Mọi sự thay đổi trên dữ liệu được cất giữ trong một DataRow– Cho phép ghi và đọc tập tin XML
• Đối tượng DataTable
– Được sử dụng để khảo sát dữ liệu qua tập hợp dòng và tập hợp cột
– Có thể lưu trữ các kết quả của một truy vấn trong một DataTable thông qua phương thức Fill của đối tượng DataAdapter
• Đối tượng DataRow
– Dùng bộ sưu tập Rows của đối tượng
– Để khảo sát dữ liệu lưu trữ trong một cột cụ thể của dòng, ta sử dụng thuộc
tính item
Trang 28Disconnected Objects
• DataColumn Object
– corresponds to a column in your table
– doesn’t contain the data stored in your DataTable Instead, it stores
information about the structure of the column
Trang 30Disconnected Objects
Demonstrations Disconnected Objects
Demonstrations
• Fetch the results of a query into a DataSet
strSql = "SELECT MaKH, TENKH FROM KHACHHANG"
Dim da As New OleDbDataAdapter(strSql, cn)
Dim ds As New DataSet
da.Fill(ds, “MAVATENCUAKH")
• Get the data returned by DataAdapter
Dim da As New OleDbDataAdapter(strSQL, cn)
Dim ds As New DataSet()
da.Fill(ds, “ABC")
Dim tbl As DataTable = ds.Tables(“ABC”)
Dim row As DataRow = tbl.Rows(0)
Response.Write(“Mã khách hàng là " & row(“MaKH")) Response.Write(“Tên khách hàng là " & row(“TenKH"))
Trang 31• Examine the data
– Use For…Next, While…End While
Trang 32Disconnected Objects
Demonstrations Disconnected Objects
Demonstrations
• Create DataTable in DataSet
Dim ds As New DataSet()Dim tbl As DataTable = ds.Tables.Add("Customers")
Dim ds As New DataSet Dim tbl As New DataTable("Customers") ds.Tables.Add(tbl)
Trang 33Disconnected Objects
Demonstrations Disconnected Objects
Demonstrations
• Create a column in DataTable
• Use methods DataTable.PrimaryKey, DataTable.Constraint
– To set PrimaryKey (consisting many properties), constraints…
Dim ds As New DataSet()
Dim tbl As DataTable = ds.Tables.Add("Customers")
Dim col As DataColumn = tbl.Columns.Add("CustomerID")
Dim ds As New DataSet()
Dim tbl As DataTable = ds.Tables.Add("Orders")
Dim col As DataColumn = tbl.Columns.Add("OrderID", _
GetType(Integer))
Trang 34Disconnected Objects
Demonstrations Disconnected Objects
Demonstrations
• Add new data
Dim row As DataRow = ds.Tables("Customers").NewRowrow("CustomerID") = "ALFKI"
ds.Tables("Customers").Rows.Add(row)
Dim aValues As Object() = {“123", "A", “B", "007"}ds.Tables("Customers").LoadDataRow(aValues, False)
Trang 36Disconnected Objects
Demonstrations Disconnected Objects
Demonstrations
• Checking database values for Null
Dim rowCustomer As DataRow rowCustomer = ds.Tables("Customers").Rows.Find("ALFKI")
If rowCustomer.IsNull("Phone") Then Response.Write("It's Null") Else
Response.Write("It's not Null") End If
• Setting database values to Null (don’t use the Null keyword from your programming language )
Dim rowCustomer As DataRow rowCustomer = ds.Tables("Customers").Rows.Find("ALFKI") rowCustomer("Phone") = DBNull.Value
Trang 38• Disconnected Objects
– Objects List – Demonstrations
– Using Disconnected objects in VS.NET
Trang 39Create DataAdapter in VS.NET
• Drag and Drop SQLDataAdapter item (or OleDbAdapter) onto your designer
• Configure this adapter (choose connection, SQL statements…)
Trang 40Fetch results to DataSet
• Right-click on the DataAdapter item and choose Generate Dataset
• If you choose create a new DataSet,
a XML Schema file will appear
• Write code
SqlDataAdapter1.Fill(DataSet11)