Data readers là các đối tượng được cung cấp trong lớp interface ‘System.Data.IdataReader’. Một ‘Data Reader’ có thể gọi là một stream đã kết nối tới cơ sở dữ liệu đọc dữ liệu hiệu quả, theo một chiều và thu nhận dữ liệu theo từng dòng (row).Vì vậy không thể trực tiếp xử lý data reader mà phải xử lý thông qua phương thức ‘ExecuteReader’ của một đối tượng command.
Ví dụ:
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(new string(“query command”), conn);
SqlDataReader reader = cmd.ExecuteReader();
Đoạn code ở trên là minh họa cách tạo một đối tượng trong lớp SqlDataReader.
Chú ý: Quy tắc chung khi sử dụng data reader đơn giản là chỉ thu nhận và trình bày kết quả thu được bằng cách duyệt từng dòng kết quả để xử lí hoặc hiển thị ra.
Thử một vài ví dụ làm việc với Data Reader
using System;
using System.Data;
using System.Data.SqlClient;
public class DemoSqlDateReader
{
public static void Main()
{
// Tạo connection
SqlConnection conn = new SqlConnection(@"Server = NguyenVanthanh;
Integrated Security = True;
Database = Demo");
// Tạo query
string sql = @"SELECT masv FROM sinhvien";
try
{
// Mở kết nối
conn.Open();
// Tạo command
SqlCommand cmd = new SqlCommand(sql, conn);
// Tạo Data Reader
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(" {0} ", reader[0].ToString());
}
reader.Close();
}
catch (SqlException ex)
{
// Thông báo lỗi
Console.WriteLine(ex.Message.ToString());
}
finally
{
// Đóng kết nối
conn.Close();
Console.WriteLine("Close connection !");
}
}
}
Trong vòng lặp thu kết quả của ‘data reader’ (reader) phương thức ‘Read()’ trỏ đến giá trị hàng tiếp theo (nếu có) . Bản chất khi reader đã có kết quả sau khi thực thi query thì reader nắm giữ toàn bộ record thu được. vì vậy có thể dùng index để gọi đến một giá trị bất kì trong kết quả thu được nằm trong giới hạn của bound.
Cuối cùng thì phải đóng lại reader. Tại sao đóng ? Vì khi đã kết nối và reader được gắn vào kết nối thì reader sẽ nằm ở đó để lấy dữ liệu khi xử lý. Cứ tưởng tượng một ngôi nhà mà chỉ có người vào không có người ra thì đến một lúc nào đó sẽ không vào được nữa mà muốn ra cũng không được. Tương tự như vậy, phải đóng lại reader sau mỗi lần đọc.
using System;
using System.Data;
using System.Data.SqlClient;
public class DemoSqlDataReader
{
public static void Main()
{
// Tạo connection
SqlConnection conn = new SqlConnection(@"Server = NguyenVanThanh;
Integrated Security = True;
Database = Demo");
// Tạo query
string sql = @"SELECT MaSV,TenSV FROM SinhVien";
try
{
// Mở kết nối
conn.Open();
// Tạo command
SqlCommand cmd = new SqlCommand(sql, conn);
// Tạo Data Reader
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("{0} | {1}", reader[0].ToString(),reader[1].ToString());
}
reader.Close();
}
catch (SqlException ex)
{
// Thông báo lỗi
Console.WriteLine(ex.Message.ToString());
}
finally
{
// Đóng kết nối
conn.Close();
Console.WriteLine("Close connection !");
}
}
}
reader[0] : chính là MaSV
reader[1] : chính là TenSV
Giả sử chúng ta SELECT TenSV, MaSV FROM SinhVien
thì reader[0] : chính là TenSV còn reader[1] : chính là MaSV
Trong ví dụ trên sẽ in ra kết quả như sau:
001|SinhVien1
002|SinhVien2
.......
Để hiều rõ hơn các bạn xem video demo sau: Download
Chúc các bạn thành công!
0 comments:
Post a Comment