Xem mẫu
- Bài 5. XỬ LÝ DỮ LIỆU VỚI ADO.NET
I. Tìm hiểu về ADO.NET
Hầu hết ứng dụng hay các website đều cần phải có cơ sở dữ liệu, để lưu trữ dữ liệu, xử lý
thông tin và đưa ra các báo cáo, hỗ trợ tìm kiếm… Khi dữ liệu trở thành trung tâm của ứng dụng
thì cung cấp các chức năng tới người dùng phụ thuộc vào khả năng thao tác dữ liệu, vấn đề mà
người thiết kế và người xây dựng ứng dụng quan tâm khi sử dụng dữ liệu là:
• Lưu dữ liệu tập trung
• Đảm bảo toàn vẹn dữ liệu
• Đảm bảo khả năng truy xuất đồng thời của nhiều người dùng trên dữ liệu
• Đảm bảo thời gian hồi đáp ngắn cho mỗi người dùng
• Bảo mật dữ liệu
• Trao đổi dữ liệu giữa các hệ thống khác nhau
Những vấn đề này được giải quyết dựa vào khả năng của các hệ quản trị cơ sở dữ
liệu(HQT CSDL) và các phần mềm xử lý dữ liệu do HQT CSDL cung cấp.
.Net truy xuất dữ liệu qua ADO.NET, đặc điểm chính của ADO.NET là khả năng làm
việc với dữ liệu không kết nối, dữ liệu được lưu trữ trong bộ nhớ như một csdl thu nhỏ gọi là
dataset, nhằm tăng tốc độ tính toán, xử lý tính toán và hạn chế sử dụng tài nguyên trên Database
Server.
Đặc điểm quan trọng thứ 2 là khả năng xử lý dữ liệu chuẩn XML, dữ liệu ở dạng XMl có
thể trao đổi giữa bất kỳ hệ thống nào nên ứng dụng của bạn sẽ có nhiều khả năng làm việc với
nhiều ứng dụng khác.
1. Kiến trúc ADO .Net
Kiến trúc ADO.NET có thể chia làm 2 phần chính:
- Managed Provider Component: bao gồm các đối tượng như DataAdapter, DataReader,…
giữ nhiệm vụ làm việc trực tiếp với dữ liệu như database, file,…
- Content Component: bao gồm các đối tượng như DataSet, DataTable,… đại diện cho dữ liệu
thực sự cần làm việc.
o DataReader là đối tượng mới, giúp truy cập dữ liệu nhanh chóng nhưng forward-only
và read-only giống như ADO RecordSet sử dụng Server cursor, OpenFowardOnly và
LockReadOnly.
Trang 86
- o DataSet cũng là một đối tượng mới, không chỉ là dữ liệu, DataSet có thể coi là một bản
sao gọn nhẹ của CSDL trong bộ nhớ với nhiều bảng và các mối quan hệ.
o DataAdapter là đối tượng kết nối giữa DataSet và CSDL, nó bao gồm 2 đối tượng
Connection và Command để cung cấp dữ liệu cho DataSet cũng như cập nhật dữ liệu
từ DataSet xuống CSDL.
2. Minh họa tạo kết nối cơ sở dữ
liệu using System; using
System.Data; using
System.Data.SqlClient;
public partial class vd1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
//Mở kết nối
cnn.Open();
//Command điều khiển truy vấn sql
SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText =
"select HotenKH from Khachhang where MaKH=5";
//lấy về chuỗi giá trị trong cơ sở dữ liệu
string result = (string)cmd.ExecuteScalar();
//đóng kết nối
cnn.Close();
//in giá trị ra màn hình
Response.Write(result);
}
}
Thi hành
Cơ bản các bƣớc thực hiện với database
• Bước 1: Tạo kết nối
• Bước 2: Mở kết nối dữ liệu
• Bước 3: Tạo lệnh điều khiển truy vấn SQL
• Bước 4: Thực thi lệnh
• Bước 5: Đóng kết nối
• Bước 6: in kết quả
II. Các đối tƣợng trong ADO.Net
Trang 87
- 1. Đối tƣợng Connection
Vai trò của Connection trong ADO.net là tạo kết nối giữa ứng dụng với nguồn dữ
liệu(CSDL)
Data Provider :
o System.Data.Oledb : Sử dụng với Access o
System.Data.SqlClient : Sử dụng với SQLServer Ứng với mỗi tên
miến ta có một connection tương ứng:
o System.Data.Oledb.OledbConnection o
System.Data.SqlClient.SqlConnection
Ngòai ra Ado.net còn hỗ trợ các Data Provider khác như
o System.data.OcracleClient : Dành cho Ocracle
o MicroSoft.data.Odbc : Dành cho dạng kết nối thong qua Odbc
Connectionủa Hệ điều hành
o Microsoft.Data.Sqlxml: Dành cho XML trên Sqlserver
Connection String
Trước khi thực hiện kết nối Connectionần khai báo các thong tin cho Connection
thông qua thuộc tính Connection String. Cách khai báo thay đổi tùy thuộc vào Data
Provider. Gồm có các thành phần sau: o Nếu kết nối với CSDL Access
Provider: Khai báo Data Provider Connectionủa Hệ QT CSDL Access
Data Source: Nguồn dữ liệu (Tên CSDL.mdb)
User ID: Tên người dùng
Password : Mật khẩu
Ví dụ: Tạo kết nối với CSDL Access
using System; using System.Data; using
System.Data.OleDb; public partial class
VD2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
String StrCnn="Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=" +
Server.MapPath("~/App_Data/QLBansach.mdb"); OleDbConnection cnn = new OleDbConnection
(StrCnn);
//Mở kết nối
cnn.Open();
//Command điều khiển truy vấn sql
OleDbCommand cmd = cnn.CreateCommand(); cmd.CommandText
= "select HotenKH from Khachhang where MaKH=2";
//lấy về chuỗi giá trị trong cơ sở dữ liệu
string result = (string)cmd.ExecuteScalar();
//đóng kết nối
cnn.Close();
//in giá trị ra màn hình
Response.Write(result);
}
}
o Nếu kết nối với CSDL SQLServer
Trang 88
- Provider: Khai báo Data Provider Connectionủa Hệ QT CSDL SQLServer
Data Source:Tên máy cài đặt SQLServer
Initial Catalog: Tên CSDL
User ID: Tên người dùng
Password : Mật khẩu
Các thuộc tính Của Connection
o DataBase: : Tương ứng với Initial Catalog(SQL) hay tên CSDL muốn làm việc
(Access) o DataSource: Tương ứng với DataSource Tên máy SQL hay
tên CSDL o Provider: Tương ứng với Provider
o State: Tình trạng kết nối Connectionủa Connection với các giá trị
Broken: Kết nối đã bị ngắt chỉ xảy ra sau khi đã kết nối
Closed: Kết nối đã đóng
Connecting: Đang kết nối
Executing: Kết nối đang thực hiện một lệnh
Fetching: Kết nối đang truy xuất dữ liệu
Open: Kết nối đang mở
Các phƣơng thức
Change Databse: Thay đổi DataBase làm việc
Close : Đóng kết nối sử dụng đóng Connection đang mở
Dispose: Xóa tòan bộ tài nguyên liên quan đấn Connection trên vùng nhớ.
Open: Thực hiện kết nối Connectionới các thông tin đã khai báo trong
ConnectionString
Ví dụ: Kiểm tra kết nối với CSDL SQLServer
protected void Button1_Click(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=;Initial Catalog=QLbansach;User ID=sa;Password=");
//Mở kết nối
cnn.Open();
TextBox1.Text = "State = " + cnn.State; ;
// Thực hiện các câu lệnh SELECT, INSERT, DELETE,
UPDATE. cnn.Close(); //Đóng kết nối
}
2. Đối tƣợng Command
Sau khi tạo kết nối với nguồn dữ liệu, mọi thao tác với nguồn dữ liệu đó đều được thực
hiện thông qua Command. Tùy theo loại Connection đối tượng Command thuộc tên miền như sau:
Trang 89
- System.Data.OleDb.OleDbCommand
System.Data.SqlClient.SqlCommand
Tạo Command
Chúng ta có thể tạo Command thông qua đối tượng Connection bàng cách:
As New ;
.Connection=;
.CommandText=;
Hoặc
As New Command();
.Connection=;
Các thuộc tính
CommandText : Lệnh SQL hay tên Stored Procedure muốn thực hiện trên nguồn dữ liệu
CommandType: Giá trị cho biết nội dugn Commandtext là gì:
Text: (Mặc định) là câu lệnh SQL
StoredProcedure: Tên thủ tục
TableDirect: Tên Connectionủa table
VD:
SqlCommand cmd As SqlCommand = New SqlCommand();
cmd.Connection = cnn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select* From Khachhang Where MaKH=2";
Parameters
Lệnh SQL trong commandText có thể sử dụng dấu ? thay cho trị chưa xác định và khi thực
hiện sẽ dùng đối tượng Parameters để truyền gái trị vào dấu ? . Tùy theo Command Parameter sẽ
khai báo từ lớp OledbParameter hay SqlParameter. Cú pháp khai báo sau:
OleDbParameter | SqlParameter As
New OleDbParameter |
SqlParameter(); OleDbParameter | SqlParameter As
New OleDbparameter |
SqlParameter(); OleDbParameter | SqlParameter As
New OleDbParameter |
SqlParamter(,); Các thuộc tính cần chú ý:
Direction : Giá trị cho biết lọai tham số
Input: (mặc định) Loại tham số đầu vào
InputOutput: Loại tham số đầu vào và ra
Output: Loại tham số đầu ra
ReturnValue: Loại tham số nhận giá trị trả về Connectionủa một thủ tục
OleDbType / SqlDbType: Kiểu dữ liệu OleDb hay SQLDb Connectionủa tham số.
ParameterName: Tên tham số
Value: Giá trị tham số
Trang 90
- Dùng phƣơng thức CreateParameter và Add Command của tập hợp Parameters.
VD: Khi sử dụng OleDbCommand cmd.CommandText=”Select * From
Khachhang Where MaKH=?”;
OleDbParameter Par As OleDbParameter= cmd.CreateParameter();
Par.Value=”KH01”;; cmd.Parameters.Add(Par);
VD: Khi sử dụng SqlDbCommand cmd.CommandText=”Select * From
Khachhang Where MaKH=@MaKH”;
SqlParameter Par As SqlParameter = cmd.CreateParameter();
Par.ParameterName=”@MaKH”;
Par.Value=”KH01”;
cmd.Parameters.Add(Par);
Đƣa tham số vào tập hợp Parameters
VD: Khi sử dụng
OleDbCommand
cmd.CommandText=”Select * From BangDiem Where Masv=? And MaMH=?”;
OleDbParameter Par1 As OleDbParameter=
cmd.CreateParameters.Add(“Sinhvien”,OleDbType.Char,4);
Par1.Value=”SV01”
OleDbParameter Par2 As OleDbParameter=
cmd.CreateParameters.Add(“Monhoc”,OleDbType.Char,4);
Par2.Value=”MH01”
VD: Khi sử dụng SqlDbCommand
cmd.CommandText=”Select * From BangDiem Where Masv=@MaSV
and MaMH =
@MaMH ”; SqlDbParameter Par1 As SqlDbParameter=
cmd.CreateParameters.Add(“@MaSV”,SqlType.Char,4);
Par1.Value=”SV01”
SqlDbParameter Par2 As SqlDbParameter=
cmd.CreateParameters.Add(“@MaMH”,SqlType.Char,
4); Par2.Value=”MH01”;
Tạo tham số và đƣa vào tập hợp Parameters
VD: Procedure SpKetQuaThi Cần 2 tham số đầu vào: @MaSV , @MaMH và trả
về Điểm thi của Môn học Connectionủa sinh viên đó. Vì vậy chúng ta Connectionần
truyền 3 tham số: 1 trả về, 2 đưa vào. Tham số trả về phải được truyền cho Command
trước tiên
cmd.CommandText=”spKetQuaThi”;
cmd.CommandType=CommandType.StoredProcedure;
OleDbParameter ts3 As New OleDbParameter();
ts3.Direction=ParameterDirection.ReturnValue;
Trang 91
- ts3.OleDbType=OleDn.OleDbType.Int;
cmd.parameters.Add(ts3);
OleDbParameter ts1 as OleDbParameter=
cmd.Parameters.Add(“@MaSV”,OleDbType.Char,4);
Ts1.Value=”Sv01”;
OleDbParameter ts2 as OleDbParameter=
cmd.Parameters.Add(“@MAMH”,OleDbType.Char
,4); Ts1.Value=”MH01”;
Thực hiện Command
Phƣơng thức ExecuteReader: Phương thức này trả về một đối tượng DataReader để đọc
dữ liệu mỗi lần một dòng với phương thức Read. DataReader đọc dữ liệu trực tiếp từ nguốn dữ
liệu nên phải duy trì kết nối đến khi đọc xong cú pháp.
SqlDataReader As SqlDataReader;
= .ExecuteReader;
VD: SqlDataReader reader As SqlDataReader;
reader = cmd.ExecuteReader;
Phƣơng thức ExcuteNoneQuery: Dùng để thực thi các phát biểu T-Sql như: Insert,
Update, Delete, Create,…
Phƣơng thức ExcuteScalar: Trả về từ phát biết SQL dạng Select chỉ có một cột một
hàng.
3. Đối tƣợng Datareader
Là đối tượng truy cập dữ liệu trực tiếp, sử dụng con trỏ phía Server và duy trì kết nối với
Server trong suốt quá trình đọc dữ liệu, DataReader thuộc tên miền
System.data.OleDbDatReader hoặc System.Data.SqlDataRaeder
Các thuộc tính
FieldCout: Số Connectionột trên dòng hiện hành của DataReader
IsClosed : Cho biết dataReader đã đóng
Item:Trị của cột truyền vào. Tham số truyền vào là tên cột hoặc số thứ tự từ 0.
Các phƣơng thức
Close: Đóng DataReader
GetFieldType: Trả về kiểu dữ liệu của cột truyền vào.
GetName: Trả về tên của cột truyền vào
GetValue: Tar3 về trị của cột truyền vào
Read : Di chuyển đến dòng kế tiếp và trả về true nếu còn dòng để di chuyển, ngược
lại trả về False.
Trong khi dataReader đang mở các thao tác dữ liệu trên nguồn dữ liệu đều không
thể cho đến khi dataRaeder đóng lại bằng lệnh Close.
4. Đối tƣợng DataAdapter
Để lầy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng một đối tượng gọi là
DataAdapter. Đối tượng này cho phép ta lấy cấu trúc và dữ liệu của các bảng trong nguồn dữ
liệu.
DataAdapte là một bộ gồm 4 đối tượng:
Trang 92
- - SelectCommand: Cho phép lấy thông tin từ nguồn dữ liệu về.
- InsertCommand cho phép thêm dữ liệu vào bảng trong nguồn dữ liệu.
- UpdateCommand cho phép điều chỉnh dữ liệu của bảng trong nguồn dữ
liệu.
- DeleteCommand cho phép xóa dữ liệu của bảng trong nguồn dữ liệu. a.
Tạo DataAdapter
Khai báo rõ DataAdapter sử dụng theo DataProvider nào: sqlDataAdapter hay
OledbDataAdapter hai lớp này thuộc tên miền:
System.Data.OleDb.OleDbDataAdapter
System.Data.SqlClient.SqlDataAdapter
Cú pháp tạo DataAdapter
New DataAdapter();
New DataAdapter();
: Có sẳn với nội dụng lệnh truy xuất.
New DataAdapter(,)
DataAdapter chỉ thao tác với một nguồn dữ liệu qua một đối tượng connection đang kết
nối, khi Connection chưa mở thì DataAdapter sẽ tự động mở kết nối khi cần và đóng lại.
VD:
OleDbDataAdapter DA As New OleDbDataAdapter();
DA.SelectCommand.CommandText=”Select * From Sinhvien”;
AD.SelectCommand.Connection.ConnectionString=”Provider=MicroSoft.Jet.OleDb.4.0;
Data Source=c:\QuanLySV.mdb”;
b. Các thuộc tín chính của DataAdapter
DeleteCommand : Đối tượng Command chứa nội dung lệnh hủy các mẫu tin trên nguồn dữ
liệu.
InsertCommand : Đối tượng Command chứa nội dung lệnh thêm các mẫu tin trên nguồn
dữ liệu.
SelectCommand: Đối tượng Command chứa nội dung lệnh truy xuất các mẫu tin trên
nguồn dữ liệu.
UpdateCommand : Đối tượng Command chứa nội dung lệnh sửa các mẫu tin trên nguồn
dữ liệu.
c. Các chức năng của DataAdapter
- Lấy dữ liệu từ nguồn: Sử dụng DataAdapter để lấy dữ liệu về cho các đối tượng o
DataTable: Fill()
o DataSet: Fill() Dữ liệu lấy về DataSet dưới dạng các dataTable với
tên mặc định là: Table,Table1, Table2. . .:
o Đổ dữ liệu vào Datset cho bảng DataTable nếu chưa có sẽ tạo mới:
Fill(,)
- Phương thức trả về mẫu tin lấy về được
Trang 93
- Dim DS as New
Dataset() Dim so As
Integer so=
DA.Fill(DS,”Sinhvien
”)
- Để cập nhật dữ liệu về nguồn
Update(): Cập nhật các dòng (Các đối tượng DataRow) vào nguồn dữ liệu.
Update(): Cập nhật các thay đổi trên tất cả các bảng của Dataset vào nguồn dữ
liệu.
Update(): Cập nhật tất cả các thay đổi trên DataTable vào nguồn dữ liệu.
Update(,) Cập nhật các they đổi trên bảng trong Dataset vào nguồn
dữ liệu..
5. Đối tƣợng DataSet
Dataset là một mô hình CSDL quan hệ thu nhỏ đáp ứng nhu cầu của ứng dụng.
Dataset chứa các bảng (DataTable) các quanhệ (DataRelation) và các ràng buộc
(constraint) Dataset thuộc tên miền: System.Data.Dataset. a. Khai báo
New System.Data.Dataset()
Hoặc
New System.Data.Dataset()
b. Các phƣơng thức
- Thêm một bảng vào Dataset
Tables.Add()
Một bảng mới tự động được tạo ra với tên mặc định Table1, Table2 . . .
Tables.Addd()
Một bảng mới tạo ra theo đúng
Ghi chú: Tên bảng có phân biệt chữ in, thường
- Xóa bảng ra khỏi Dataset
Tables.Remove()
Xóa bảng ra khỏi tập hợp Table.
- Kiểm tra bảng có thuộc về Dataset Tables.Contains()
- Lấy chỉ số của bảng
Tables.IndexOf()
- Lấy số bảng trong Dataset
Tables.Count
- Lấy ra một bảng trong Dataset
Tables()
- Để cập nhật các thay đổi trên Dataset
AcceptChanges()
- Để hủy các thay đổi trên Dataset
Trang 94
- RejectChanges()
- Để xóa bỏ mọi dữ liệu trên dataSet
Clear()
- Để tạo một bản sau của Dataset
Clone()
- Để xóa bỏ Dataset
Gọi phương thức Dispone để giải phóng mọi tài nguyên trên vùng nhớ Dataset đang sử
dụng.
- Tạo quan hệ giữa hai bảng trong Dataset.
Relations.Add(,)
- Xóa quan hệ giữa hai bảng trong Dataset. Relations.Remove()
6. Đối tƣợng Datatable
Dữ liệu các bảng trong nguồn dữ liệu được lấy về và đưa vào các DataTable. DataTable
thuộc tên miền : System.Data.dataTable.
Cú pháp:
New DataTable();
New DataTable();
DataTable được hình thành từ các DataColumn, DataRow.
III. Một số minh họa
1. Kết nối cơ sở dữ liệu
protected void Button1_Click(object sender, EventArgs e) {
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
//Mở kết nối cnn.Open();
// Thực hiện các câu lệnh SELECT, INSERT, DELETE, UPDATE. TextBox1.Text = "State = " +
cnn.State;
//Đóng kết nối cnn.Close();
}
2. Kết nối, thao tác dữ liệu, sử dụng đối tượng Command với câu lệnh SELECT
Trang 95
- protected void Button2_Click(object sender, EventArgs e)
{ try
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
//Khai báo và khởi tạo biến Command SqlCommand cmd = new
SqlCommand();
//Khai báo biến Command sử dụng Connection nào để đến database? cmd.Connection = cnn;
//Biến Commnad thao tác với database bằng
//(1.Câu lệnh, 2.Tên bảng, 3.Tên Store) nào?
cmd.CommandText = "SELECT COUNT(*) FROM Chude";
//Cho biết CommandText chính là câu lệnh. cmd.CommandType =
CommandType.Text;
//Mở kết nối cnn.Open();
// Lấy dữ liệu về bằng phương thức ExecuteScalar.
int count = (int)cmd.ExecuteScalar(); //Xuất kết quả ra WebForm
TextBox2.Text = count.ToString();
//Đóng kết nối. cnn.Close();
}
catch (Exception)
{
//Xuất kết quả ra WebForm
TextBox2.Text = "Không thành công!"; }
}
3. Kết nối, thao tác dữ liệu, sử dụng đối tượng Command với câu lệnh INSERT,
UPDATE, DELETE
protected void Button3_Click(object sender, EventArgs e)
{ try
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn;
//Biến Commnad thao tác với database bằng câu lệnh
//(INSERT, UPDATE, DELETE)
cmd.CommandText = "INSERT INTO CHUDE(TenCD) VALUES(N'Văn hóa')";
cmd.CommandType = CommandType.Text;
cnn.Open();
//Thao tác dữ liệu (INSERT, UPDATE, DELETE)
//bằng phương thức ExecuteNonQuery.
cmd.ExecuteNonQuery();
//Xuất kết quả ra WebForm TextBox3.Text = "Thành
công!"; cnn.Close();
}
catch (Exception)
{
//Xuất kết quả ra WebForm
TextBox3.Text = "Không thành công!"; }
}
4. Kết nối, thao tác dữ liệu, sử dụng đối tượng Command với câu lệnh INSERT,
UPDATE, DELETE + Truyền tham số.
Trang 96
- protected void Button4_Click(object sender, EventArgs e)
{ try
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn;
//Khai báo và khởi tạo tham số
SqlParameter parTenLinhVuc = new SqlParameter("@TENCHUDE",
SqlDbType.NVarChar, 50);
cmd.CommandText =
"INSERT INTO CHUDE VALUES(@TENCHUDE)";
cmd.CommandType = CommandType.Text;
//Thêm biến tham số cho Command cmd.Parameters.Add(parTenchude);
//Gán giá trị cho biến tham số parTenLinhVuc.Value = TextBox1.Text;
cnn.Open();
cmd.ExecuteNonQuery(); cnn.Close();
lbThongbao.Text = "Thành công!";
}
catch (Exception)
{
lbThongbao.Text = "Không thành công!";
}
}
5. Kết nối, thao tác dữ liệu, sử dụng đối tượng Command với câu lệnh INSERT,
UPDATE, DELETE + Truyền tham số.
protected void Button5_Click(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn;
cmd.CommandText = "SELECT * FROM Nhaxuatban"; cmd.CommandType =
CommandType.Text;
cnn.Open();
//Lấy danh sách nhà xuất bản bỏ vào biến DataReader
IDataReader dr = cmd.ExecuteReader();
String list = ""; //Duyệt qua
DataReader while (dr.Read())
{
list = list + dr["TenNXB"].ToString().Trim() + " ";
}
dr.Close();
TextBox6.Text = list.ToString(); cnn.Close();
}
6. Kết nối cơ sở dữ liệu + gọi store để lấy dữ liệu.
Trang 97
- CREATE PROCEDURE GetNhaxuatban
AS
BEGIN
SELECT * FROM Nhaxuatban
END
GO
protected void Button6_Click(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand("Getnhaxuatban", cnn); cmd.Connection
= cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open();
IDataReader dr = cmd.ExecuteReader();
String list = ""; while (dr.Read())
{
list = list + dr["TenNXB"].ToString();
}
dr.Close();
TextBox7.Text = list.ToString(); cnn.Close();
}
7. Kết nối cơ sở dữ liệu + gọi store để lấy dữ liệu + truyền tham số.
CREATE PROCEDURE GetchudeByMachude
@Machude char(15)
AS
BEGIN
SELECT * FROM CHUDE WHERE MaCD=@Machude
END
GO
protected void Button7_Click(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand("GetchudeByMachude", cnn); cmd.Connection = cnn;
cmd.CommandType = CommandType.StoredProcedure; //Khai báo và khởi tạo biến Command
SqlParameter parMALINHVUC = new SqlParameter("@Machude", SqlDbType.NChar, 10);
parMAVHUDE.Value = TextBox1.Text;
cmd.Parameters.Add(parMACHUDE);
cnn.Open();
IDataReader dr = cmd.ExecuteReader();
String list = ""; while (dr.Read())
{
list = list + dr["Tenchude"].ToString();
}
dr.Close();
TextBox2.Text = list.ToString(); cnn.Close();
}
8. Kết nối cơ sở dữ liệu + sử dụng DataAdapter + update dữ liệu
Trang 98
- protected void Button8_Click(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlDataAdapter da = new SqlDataAdapter("select * from CHUDE", cnn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da); DataSet ds = new
DataSet();
da.Fill(ds);
foreach (DataRow row in ds.Tables[0].Rows) if
(row["MaCD"]=="1")
{
row["TENCHUDE"] = "BBB";
}
TextBox1.Text = ds.Tables[0].Rows[2].ItemArray[1].ToString();
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
//Không sử dụng SqlCommandBuilder thì không thể update dữ liệu.
da.Update(ds);
}
9. Kết nối cơ sở dữ liệu + sử dụng DataAdapter + gọi store
protected void Button9_Click(object sender, EventArgs e)
{
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password="); //Khai báo và
khởi tạo SqlDataAdapter
SqlDataAdapter da = new SqlDataAdapter("GETNHAXUATBAN", cnn); //Khai báo và khởi tạo
DataSet
DataSet ds = new DataSet();
//Lấy dữ liệu trả về đổ vào dataset ds da.Fill(ds);
TextBox11.Text = ds.Tables[0].Rows[2].ItemArray[1].ToString();
GridView2.DataSource = ds.Tables[0];
GridView2.DataBind(); }
10. Kết nối cơ sở dữ liệu + sử dụng DataAdapter + gọi store + truyền tham số
protected void Button10_Click(object sender, EventArgs e) {
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand("GetchudeByMachude", cnn); cmd.Connection = cnn;
cmd.CommandType = CommandType.StoredProcedure; //Khai báo và khởi
tạo tham số
SqlParameter parMACD =new SqlParameter("@MACD", SqlDbType.NChar, 10); parMACD.Value =
"1"; cmd.Parameters.Add(parMACD);
cnn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd; DataSet ds = new
DataSet();
da.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind(); cnn.Close();
}
11. Kết nối cơ sở dữ liệu + sử dụng DataAdapter + đối số là Command
Trang 99
- protected void Button10_Click(object sender, EventArgs e) {
//Khai báo và khởi tạo biến Connection
SqlConnection cnn = new SqlConnection("Data Source=(local);
Initial Catalog=QLbansach;User ID=sa;Password=");
SqlCommand cmd = new SqlCommand("GETNHAXUATBAN ", cnn); cmd.Connection = cnn;
cmd.CommandType = CommandType.StoredProcedure; cnn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd; //da.InsertCommand = cmd;
//da.DeleteCommand = cmd;
//da.UpdateCommand = cmd; DataSet ds = new
DataSet(); da.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind(); cnn.Close();
}
}
Trang 100
- Bài 4. CÁC ĐIỀU KHIỂN LIÊN KẾT DỮ LIỆU
• Sử dụng các điều khiển Data List, DataGrid và Repeater để hiển thị dữ liệu.
• Liên kết dữ liệu với các kiểu tập hợp:ArrayList, SortedList, HashTable, …
I. Điều khiển DataGrid
DataGrid là một điều khiển khá linh hoạt và hiệu quả trong việc hiển thị, định dạng và thao
tác với dữ liệu. Bên cạnh đó, chúng ta có thể thực hiện sắp xếp dữ liệu, thực hiện phân trang với
sự hỗ trợ khá tốt của VS .Net trong quá trình thiết kế.
Bổ sung Control DataGrid vào Thanh ToolBox (Nếu chưa có): Click phải thanh toolbox
chọn Choose Items.
Đánh dấu vào mục DataGrid (System.Web.UI.WebControls) Ok
1. Tạo DataGrid vào trang
Kéo Control DataGrid vào trang
Định dạng tự động
Kết nối nguồn dữ liệu
Thiết lập thuộc tính
2. Định dạng tự động
Thực hiện chọn những mẫu định dạng có sẳn quy định về khung viền màu nền bằng cách
Chọn Auto Format từ khung DataGrid Task
Trang 101
- 3. Kết nối nguồn dữ liệu
Chọn New Data Source từ mục Choose Data Source
Chọn lọai nguồn dữ liệu (DataBase)
Đặt tên cho nguồn dữ liệu (Sieuthi)
Trang 102
- Chọn New Connection Chọn Microsoft SQL Server Continue
Khai báo các thông số của CSDL => Chọn Test Connection để kiểm tra. Chọn Ok để đồng
ý kết nối.
Trang 103
- Trang 104
- Khai báo dữ liệu cần truy xuất.
Chọn Test Query để kiểm tra kết quả. Chọn Finish để hòan tất
4. Thiết lập các thuộc tính
Để thực hiện các thao tác thiết lập các thuộc tính, chúng ta chọn chức năng Property
Builder… từ khung DataGrid Task. a. Trang General
Trong trang này, có các mục chọn sau:
• Show header: Qui định dòng tiêu đề trên có được phép hiển thị hay không. (mặc định là có
hiển thị dòng tiêu đề)
Trang 105
nguon tai.lieu . vn