Tải bản đầy đủ (.pdf) (262 trang)

Giáo trình lập trình quản lý

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (12.06 MB, 262 trang )


Phân công:
H và tên
Công vic
Nguyễn Văn Tập (Nhóm trưởng)
Code demo chương trình
Trịnh Thanh Sang
Quay Video
Võ Thị Cẩm Ngân
Soạn bài báo cáo
Dương Thị Ngọc Giàu
Soạn slide báo cáo
Nguyễn Thị Phượng Hằng
Soạn các câu hỏi củng cố

MC LC
I. Gii Thiu 2
1. Giới thiệu về namespace System.xml (introduction to namespace System.xml) 2
2. Đọc và Ghi XML (Read and write Streamed XML) 4
2.1 Sử dụng lớp XmlTexReader 4
2.2 Các phương thức Read 6
2.3 Lấy thuộc tính của dữ liệu: 7
2.4 Sử dụng lớp XmlValidatingReader 8
2.5 Sử dụng Schema property 9
2.6 Sử dụng lớp XmlTextWriter 9
II.  11
 Bước 1: Tạo project mới có tên là DemoKetNoiSQL 11
 Bước 2: Tao form với các control như hình bên dưới 11
 Bước 3: Tạo file xml trong thư mục debug của chương trình. 12
 Bước 4: Thêm class DataProvide vào chương như hình bên dưới: 13
 Bước 5:Tạo thêm class SQLInformation 16


 Bước 6: Ta viết các hàm sự kiện cho form 17
 Bước 7: Vào SQL tạo một cơ sở dữ liệu tên là QLBH vậy là chúng ta có thể kết nối thành công. 20
III. Câu hi 20
1. Câu hỏi Thực hành: 20
2. Câu hỏi lý thuyết: 20
3. Câu hỏi trắc nghiệm 21

I. Gii Thiu
XML (eXtensible Markup Langue) đóng một vai trò quan trọng trong .NET. Không chỉ
vì .NET cho phép bạn sử dụng XML trong các ứng dụng của bạn, mà bản thân nó cũng sử dụng
XML cho những file cấu hình và tài liệu mã nguồn, như SOAP, các dịch vụ web và Ado.net. Do
đó tìm hiểu về các xử lý XML trong .Net với ngôn ngữ C# là một điều nên làm. Bài viết này
1. Giới thiệu về namespace System.xml (introduction to namespace System.xml)
- namespace System.xml trong .NET cung cấp một số lớp hỗ trợ cho việc xử lý XML.
Dưới đây là những lớp đọc và ghi XML.

Tên 
 thích
XmlReader
Một lớp đọc trừu tượng nhanh và non-cached dữ liệu XML.
XmlReader được thiết kế giống như bộ phân tách SAX.
XmlWriter
Một lớp viết trừu tượng nhanh và non-cached dữ liệu XML trong
một dòng hoặc định dạng file.
XmlTexReader
Mở rộng của XmlReader. Cung cấp chuỗi truy cập nhanh dữ liệu
XML.
XmlTexWriter
Mở rộng của XmlWriter. Phát nhanh các dòng XML.




- Một vài lớp hữu ích khác trong XML:
Tên 
 thích
XmlNode
Một lớp trừu tượng miêu tả một nút đơn trong một tài liệu XML.
Lớp cơ sở cho các lớp khác trong namespace XML.
XmlDocument
Mở rộng của XmlNode. Đây là một thực thi W3C Document
Object Model (DOM). Nó cung cấp một cây miêu tả tài liệu
XML trong bộ nhớ cho phép điều hướng và soạn thảo.
XmlDataDocument
Mở rộng của XmlDocument. Đây là một tài liệu có thể được tải
từ dữ liệu XML hoặc từ dữ liệu trong một ADO.NET DataSet.
Cho phép hòa trộn XML và dữ liệu quan hệ trong cùng một
view.
XmlResolver
Một lớp trừu tượng dùng giải quyết các tài nguyên XML ngoài
như DTD và tham chiếu sơ đồ. Cũng dùng để xử lí các thành
phần <xsl:include> và <xsl:import>.
XmlUrlResolver
Mở rộng của XmlResolver. Giải quyết các tài nguyên tên như
một URI (Uniform Resource Identifier).

- Lưu ý: namespace xml có sẵn cho bất kỳ ngôn ngữ nào biết .NET


2. Đọc và Ghi XML (Read and write Streamed XML)
- Cả 2 lớp XmlReader và XmlWriter đều là những lớp

trừu tượng. Hình dưới đây minh họa các lớp kế thừa từ 2
lớp này:
+ XmlTextReader và XmlTextWriter làm việc chung trên
các đối tượng stream hoặc các đối tượng
TextReader/TextWriter trong namespace System.IO.
+ XmlNodeReader sử dụng XmlNode cho một nguồn
thay cho một stream. XmlValidatingReader thêm DTD
với sơ đồ tích hợp và tất nhiên là cả dữ liệu hợp lệ.




2.1 Sử dụng lớp XmlTexReader
- XmlTexReader rất giống SAX. Một trong những khác biệt lớn nhất: SAX là một mô
hình kiểu push, còn XmlTextReader là một mô hình pull, ở đó dữ liệu được kéo vào ứng dụng
yêu cầu nó. Nó tạo ra một mô hình lập trình dễ dàng và trực quan hơn. Một lợi ích khác của mô
hình pull là có thể lựa chọn dữ liệu để gởi đến ứng dụng: nếu bạn không muốn tất cả các dữ liệu,
vì không cần xử lý tất cả chúng. Còn trong mô hình push, tất cả dữ liệu XML cần phải được xử
lý bởi ứng dụng, mặc cho nó có muốn hay không.
- Để sử dụng lớp này bạn cần khai báo :
using System.Xml;
- Bây giờ hãy mở visual studio của bạn lên:
+ Kéo vào một ListBox và một Button như
hình bên;
+ Sau đó viết sự kiện cho button Load XML
như sau:


- Kết quả khi chạy chương trình trên và click vào button LoadXML như hình bên dưới.


- XmlTextReader này sử dụng khá đơn giản.
+ Trước tiên chúng ta tạo ra một đối tượng string chứa dường dẫn tới file xml.
Sau đó tạo một đối tượng XmlTextReader mới với tham số là đường dẫn tới file xml.
+ Khi chương trình chạy đến vòng lặp while, phương thức Read sẽ được di
chuyển sang mục tiêu đầu tiên trong tài liệu. Nó tiêu biểu cho các mục khai báo XML.

Trong ví dụ này, chúng ta duyệt qua từng mục và so sánh xtr.NodeType với bộ
XmlNodeType, và thêm các mục được tìm thấy vào listbox.
2.2 Các phương thức Read
- Có một vài cách di chuyển trong tài liệu. Như bạn đã thấy trong ví dụ trên,
Read() có thể di chuyển sang mục tiếp theo. Chúng ta có thể xem nêu mục đó có giá trị
(HasValue()) , hoặc nếu mục đó có thuộc tính (HasAttributes()) . Chúng ta cũng có thể
dùng phương thức ReadStartElement(), để kiểm tra xem nếu mục hiện tại là thành phần
khởi đầu, và chuyển sang mục tiếp theo. Nếu không phải là mục khởi đầu một ngoại lệ
XmlException sẽ được phát ra. Việc gọi phương thức này giống như gọi phương thức
IsStartElement(), bởi một Read().
- Các phương thức ReadString() và ReadChars() đều đọc dữ liệu văn bản từ một
thành tố. ReadString() tra về một chuỗi dữ liệu, trong khi ReadChars() trả về một mảng
dữ liệu kiểu char.
- ReadElementString() cũng giống như ReadString(), ngoại trừ việc bạn không
phải truyền tên của một thành tố. Nếu nội dung của mục tiếp theo không phải là một start
tag, hoặc nếu tham số Name không không phải là Name của mục hiện hành, thì một
ngoại lệ sẽ được phát ra.
- Dưới đây là ví dụ chỉ ra cách sử dụng ReadElementString(), lưu ý khai báo:
1. using System.IO;
2. private void btnLoadXML_Click(object sender, EventArgs e)
3. {
4. string fileName = “Book.xml”;
5. FileStream fs = new FileStream(fileName, FileMode.Open);
6. XmlTextReader xtr = new XmlTextReader(fs);

7. while (!xtr.EOF)
8. {
9. if (xtr.MoveToContent() == XmlNodeType.Element && xtr.Name == “title”)
10. {
11. listBox1.Items.Add(xtr.ReadElementString());
12. }
13. Else

14. {
15. xtr.Read();
16. }
17. }
18. }
- Trong vòng lặp while chúng ta sử dụng MoveToContent() để tìm trên mỗi dòng
xem XmlNodeType.Element có giống với named title không. Chúng ta sử dụng thuộc
tính EOF của XmlTextReader như là một điều kiện lặp. Nếu mục không phải kiểu
Element của named title, mệnh đề else phát ra một phương thức Read() để di chuyển sang
mục tiếp theo. Khi chúng ta tìm thấy một mục thỏa điều kiện, chúng ta trả kết quả của
ReadElementString() cho listbox. Nó cho phép các tựa sách được liệt kê trong listbox.
Chú ý rằng chúng ta không tạo ra một lời gọi Read() sau khi một ReadElementString()
thực hiện thành công. Bởi vì ReadElementString() cũng sẽ di chuyển sang mục tiếp theo.
- Nếu bạn bỏ && tr.Name==”title” trong mệnh đề if, bạn sẽ nhận được ngoại lệ
XmlException. Nếu nhìn vào file dữ liệu, bạn sẽ thấy thành tố đầu tiên mà
MoveToContent() tìm ra là <bookstore>. Tất nhiên nó vì nó không chứa một kiểu text
chuẩn, nên ReadElementString() phát ra một ngoại lệ XmlException.
2.3 Lấy thuộc tính của dữ liệu:
- Khi bạn chạy các ví dụ trên, bạn nhận ra rằng khi các mục được đọc, bạn không
thấy bất kì thuộc tính nào cả. Đó là vì các thuộc tính không nằm trong tài liệu. Khi đang
đứng trên một mục, bạn có thể kiểm tra các thuộc
tính và có thể lấy giá trị của bất kì giá trị thuộc tính

nào.
- Thuộc tính HasAttributes sẽ trả về giá trị
true nếu có bất kì thuộc tính nào còn không sẽ trả về
false. Thuộc tính AttributeCount sẽ cho bạn biết có
bao nhiêu thuộc tính, và phương thức GetAttribute()
sẽ trả về một thuộc tính thông qua tên hoặc chỉ mục.
Nếu bạn muốn lặp qua các thuộc tính bạn có thể
dùng các phương thức MoveToFirstAttribute() và MoveToNextAttribute().
- Dưới đây là một ví dụ về việc lặp qua các thuộc tính.
1.string fileName = “Book.xml”;

2.FileStream fs = new FileStream(fileName, FileMode.Open);
3.XmlTextReader xtr = new XmlTextReader(fs);
4.while (xtr.Read())
5.{
6.if (xtr.NodeType == XmlNodeType.Element)
7.{
8.for (int i = 0; i < xtr.AttributeCount; i++)
9.{
10. listBox1.Items.Add(xtr.GetAttribute(i));
11. }
12. }
13. }
- Bây giờ chúng ta xem xét về các mục thành phần. Khi chúng ta tìm thấy một
mục, chúng ta lặp qua tất cả thuộc tính của nó, và dùng phương thức GetAttribute() để
load giá trị của thuộc tính vào listbox. Trong ví dụ này các thuộc tính đó là genre,
publicationdate, và ISBN.
2.4 Sử dụng lớp XmlValidatingReader
- Nếu bạn muốn xác nhận một tài liệu XML, bạn sẽ cần phải sử dụng lớp
XmlValidatingReader. Nó chứac các khả năng giống như XmlTextReader (Cả hai đều xuất phát

từ XmlReader) nhưng XmlValidatingReader có thêm thuộc tính ValidationType, thuộc tính
Schemas và SchemaType.
- Nếu bạn gán thuộc tính ValidationType giá trị xác nhận mà bạn muốn. Giá trị hợp lệ
của thuộc tính này được liệt kê trong bảng sau:
Property
value
Description
Auto
Nếu một DTD được khai báo trong một khai báo <!DOCTYPE…>, điều
này cho phép DTD sẽ được load và xử lí. Giá trị mặc định cho các
DTD.Nếu một thuộc tính XSD schemalocation được tìm thấy, XSD được
load và xử lí, và sẽ trả về các giá trị mặc định trong sơ đồ.
Nếu một không gian tên với tiếp đầu ngữ MSXML x-schema được tìm
thấy, nó sẽ load và xử lí sơ đồ XDR và trả về các thuộc tính mặc định đã

được định nghĩa.
DTD
Phù hợp theo chuẩn DTD.
Schema
Phù hợp theo sơ đồ XSD.
XDR
Phù hợp theo sơ đồ XDR
None
Không giá trị hợp lệ nào được thực thi.
- Khi một thuộc tính trong này được chọn, Một ValidationEventHandler cần phải được gán. Đây
là một sự kiện được tạo ra do các lỗi. Bạn có thể tác động lại lỗi theo các mà bạn cho là phù hợp.
2.5 Sử dụng Schema property
Schemas property của XmlValidatingReader chứa một XmlSchemaCollection, có
thể tìm thấy trong không gian tên System.Xml.Schema. Tập hợp này tổ chức load lại
loaded XSD và XDR schemas. Nó cực nhanh đặc biệc là khi bạn cần kiểm tra sự hợp lệ

của nhiều tài liệu khác nhau, vì sơ đồ sẽ không được load mỗi khi kiểm tra. Các bước sử
dụng thuộc tính này như sau, bạn tạo một đối tượng XmlSchemaCollection. Phương thức
Add(), nằm trong một XmlSchemaCollection, có bốn quá tải. Bạn có thể truyền nó cho
một đối tượng xuất phát từ XmlSchema, một đối tượng xuất phát từ
XmlSchemaCollection, một chuỗi không gian tên với chuỗi URI của file sơ đồ và một đối
tượng xuất phát từ XmlReader chứa trong sơ đồ.

2.6 Sử dụng lớp XmlTextWriter
- Lớp XmlTextWriter cho phép bạn xuất XML thành một chuỗi, một file hoặc
một đối tượng a TextWriter. Giống như XmlTextReader, nó là một kiểu forward-only,
non-cached. XmlTextWriter có thể cấu hình cao, cho phép bạn chỉ rõ những thứ như cho
phép thục đầu dòng, số thục đầu dòng, kí tự chỉ dẫn nào được dùng trong các giá trị thuộc
tính cho phép namespace hỗ trợ.
- Hãy xem ví dụ sau, để biết cách sử dụng lớp XmlTextWriter
1. private void btnGhiXML_Click(object sender, EventArgs e)
2. {
3. SaveFileDialog sfd = new SaveFileDialog();
4. sfd.Filter = "XML file(*.xml)|*.xml";
5. sfd.RestoreDirectory = true;\

6. if (sfd.ShowDialog() == DialogResult.OK)
7. {
8. XmlTextWriter xtw = new XmlTextWriter(sfd.FileName, null);
9. xtw.Formatting = Formatting.Indented;
10. xtw.WriteStartDocument();

11. // write to element HoTen
12. xtw.WriteStartElement("LyLich");

13. xtw.WriteAttributeString("QuocTich", "Viet Nam");

14. xtw.WriteElementString("HoTen", txtHoTen.Text);
15. xtw.WriteElementString("QueQuan", txtQueQuan.Text);
16. xtw.WriteElementString("NgaySinh", txtNgaySinh.Text);

17. xtw.WriteEndElement();
18. xtw.WriteEndDocument();
19. xtw.Flush();
20. xtw.Close();
21. }
22. }
- Chương trình demo có
giao diện như sau:
Khi nhấn button ghi ra file XML
thì hộp thoại saveFileDialog sẽ hiện ra
để bạn chọn đường dẫn lưu file. Bạn
điền tên file rồi sau đó chọn save thì file
sẽ lưu lại với đuôi mở rộng là .xml với
tên mà bạn đã đặt cho nó.
Sau đó bạn click chuột phải vào
file xml vừa được tạo ra chọn Edit thì sẽ
thấy nội dung mà chương trình đã ghi ra.
- Các thành phần được điều khiển bằng việc theo dõi khi nào bạn bắt đầu và kết thúc thao
tác viết các thành phần các thuộc tính. Bạn có thể bắt gặp chúng khi chúng ta thêm vào tên của
thành phần con cho các thành phần lớn. Chú ý việc các lời gọi phương thức WriteStartElement()
và WriteEndElement() được tổ chức như thế nào và các tổ chức các sản phẩm các bộ thành phần
trong file xuất.
- Các phương thức WriteElementString() và WriteAttributeString(), có một vài phương
thức ghi đặc biệc. WriteCData() sẽ xuất ra một đoạn CData (<!CDATA[ ]]>), việc xuất ra các
text cần một tham số. WriteComment() xuất ra một ghi chú theo định dạng XML. WriteChars()
xuất ghi chi của của một chuỗi các kí tự. Điều này cũng tương tự phương thức ReadChars() mà


chúng ta đã biết; chúng đều sử dụng cùng các tham số. WriteChars() cần một vùng đệm (một
mảng kí tự) Vị trí bắt đầu đẻ ghi (một số integer) số các kí tự sẽ ghi (một số integer).
- Thao tác đọc và ghi XML dùng các lớp xuất phát từ XmlReader và XmlWriter đơn giản
và mềm dẻo đến hơn chúng ta tưởng tượng rất nhiều.
II. 
XML
Bước 1: Tạo project mới có tên là DemoKetNoiSQL
Bước 2: Tao form với các control như hình bên dưới






Combobox
Name: cbserver
na
Textbox
Name: txtUser,txtPass
Listbox
Name:
listBox1
Các button
chức năng

Bước 3: Tạo file xml trong thư mục debug của chương trình.
Tạo file notpad++ trong đó ghi các dòng sau:
1. <?xml version="1.0"?>
2. <cauhinh>

3. <servername>ADMIN\SQLEXPRESS</servername>
4. <database>QLBH</database>
5. <username>sa</username>
6. <password>sql2008</password>
7. <connectStr>Data Source=ADMIN\SQLEXPRESS; Initial Catalog =QLBH;
Integrated Security=SSPI;</connectStr>
8. </cauhinh>

Khi save as ta chọn đến thư mục debug của chương trình và phần mở rộng của nó ta để là
.xml. Cuối cùng ta được như hình bên dưới




Bước 4: Thêm class DataProvide vào chương như hình bên dưới:



Trong class này, đầu tiên tạo là lớp DataProvide sẽ kết thừa lớp DataTable:
1. class DataProvide : DataTable
Trong lớp DataProvide có các thuộc tính như:
1. public static string m_ConnectString;
2. private static SqlConnection m_Connection;
3. private SqlCommand m_Command;
4. private SqlDataAdapter m_DataAdapter;

Tiếp theo, tạo các hàm lấy dữ liệu cho thuộc tính:
1. public static SqlConnection Connection
2. { get { return m_Connection; } }
3. public SqlCommand SqlCmd

4. {
5. get { return m_Command; }
6. set { m_Command = value; }
7. }
8. public void CloseConnetion()
9. {
10. m_Connection.Close();
11. }


Tiếp theo trong class này tạo thêm các hàm mở, đóng kết nối,…
1. public bool OpenConnection()
2. {
3. try
4. {
5. if (m_Connection == null)
6. m_Connection = new SqlConnection(m_ConnectString);
7. if (m_Connection.State == ConnectionState.Closed)
8. m_Connection.Open();
9. return true;
10. }
11. catch (Exception e)
12. {
13. m_Connection.Close();
14. MessageBox.Show(e.Message);
15. return false;
16. }
17. }
18. public void CloseConnetion()
19. {

20. m_Connection.Close();
21. }
22. public DataProvide()
23. {
24. string patch = Application.StartupPath + "\\cauhinh.xml";
25. DocFileCauHinh(patch);
26. }




Sau cùng trong class này tạo 2 hàm đó là hàm Load() và hàm DocFileCauHinh()
1. public void Load(SqlCommand cmd)
2. {
3. m_Command = cmd;
4. try
5. {
6. this.Clear();
7. m_Command.Connection = m_Connection;
8. m_DataAdapter = new SqlDataAdapter();
9. m_DataAdapter.SelectCommand = m_Command;
10. m_DataAdapter.Fill(this);
11. }
12. catch (Exception e)
13. {
14. MessageBox.Show(e.Message);
15. }
16. }
17. public static void DocFileCauHinh(string patch)
18. {

19. XmlTextReader reader = new XmlTextReader(patch);
20. reader.MoveToElement();
21. while (reader.Read())
22. {
23. if (reader.NodeType == XmlNodeType.Element && reader.Name
== "cauhinh")
24. {
25. while (reader.Read())
26. {
27. if (reader.NodeType == XmlNodeType.Element &&
reader.Name == "connectStr")
28. {
29.
30. DataProvide.m_ConnectString = reader.ReadString();
31. break;
32. }
33. }
34. }
35. }





Bước 5:Tạo thêm class SQLInformation

Trong class SQLInformation này ta code như sau:
1. public static string m_SQLServer;
2. public static string m_Username;
3. public static string m_Password;

4. public ArrayList GetSQLServersDatabases()
5. {
6. ArrayList data = new ArrayList();
7. SqlConnection con = new SqlConnection("server=" + m_SQLServer +
";uid=" + m_Username + ";pwd=" + m_Password);
8. con.Open();
9. SqlCommand cmd = new SqlCommand();
10. cmd.Connection = con;
11. cmd.CommandType = CommandType.StoredProcedure;
12. cmd.CommandText = "sp_databases";
13. SqlDataReader dr = cmd.ExecuteReader();
14. while (dr.Read())
15. {
16. data.Add(dr.GetString(0));
17. }
18. con.Close();
19. return data;
20. }
21. string[] s;
22. public bool AttachDatabases(string patch)
23. {
24. try
25. {
26. char[] c = { '\\' };

27. s = patch.Split(c);
28. string ten = "";
29. ten = s[s.Length - 1];
30. string patch1 = "";
31. patch1 = patch.Substring(0, patch.Length - 4);

32. SqlConnection con = new SqlConnection(@"Data Source=" +
m_SQLServer + "; Initial Catalog = master; User=" + m_Username +
";Password=" + m_Password + ";");
33. con.Open();
34. SqlCommand cmd = new SqlCommand();
35. cmd.Connection = con;
36. cmd.CommandText = @"CREATE DATABASE [" + ten + "] ON (
FILENAME = N'" + patch + "' ),( FILENAME = N'" + patch1 + "_log.ldf' )
FOR ATTACH";
37. cmd.ExecuteNonQuery();
38. con.Close();
39. return true;
40. }
41. catch (Exception e)
42. {
43. MessageBox.Show(e.Message.ToString());
44. return false;
45. }
46. }

Bước 6: Ta viết các hàm sự kiện cho form
Để viết các hàm cho sự kiện click đầu tiên ta viết thêm các hàm hỗ trợ khác code như
sau:
1. SQLInformation sql = new SQLInformation();
2. DataProvide data = new DataProvide();
3. OpenFileDialog open = new OpenFileDialog();
4. private bool ktraHople()
5. {
6. if (cbServer.Text == "select")
7. {

8. MessageBox.Show("Please choose a SQL Server", "Khuvv -
NapolySoft", MessageBoxButtons.OK, MessageBoxIcon.Information);
9. cbServer.Focus();
10. return false;
11. }
12.
13. if (txtUser.Text == "")
14. {
15. MessageBox.Show("Please fill into left blank", "Khuvv -
NapolySoft", MessageBoxButtons.OK, MessageBoxIcon.Information);
16. txtUser.Focus();

17. return false;
18. }
19.
20. if (txtPass.Text == "")
21. {
22. MessageBox.Show("Please fill into left blank", "Khuvv -
NapolySoft", MessageBoxButtons.OK, MessageBoxIcon.Information);
23. txtPass.Focus();
24. return false;
25. }
26. return true;
27. }
28. private void loadServer()
29. {
30. listBox1.Items.Clear();
31. SQLInformation.m_Username = txtUser.Text;
32. SQLInformation.m_Password = txtPass.Text;
33. SQLInformation.m_SQLServer = cbServer.SelectedItem.ToString();

34. ArrayList data = sql.GetSQLServersDatabases();
35. for (int i = 0; i < data.Count; i++)
36. {
37. listBox1.Items.Add(data[i]);
38. }
39. listBox1.Show();
40. }

Tiếp theo nhấn đúp vào form để viết code cho sự kiện formload
1. private void Form1_Load(object sender, EventArgs e)
2. {
3. string cb = SystemInformation.ComputerName +
"\\SQL";//"\\SQLEXPRESS";
4. listBox1.Hide();
5. bt_dn.Enabled = false;
6. cbServer.Items.Add(cb);
7. }

Tương tự nhấn đúp vào nút Đăng nhập để viết code cho sự kiện Click của nút Đăng
nhập
1. private void bt_dn_Click(object sender, EventArgs e)
2. {
3. if (ktraHople())
4. {
5. loadServer();
6. }
7. }


Kế đến, nhấn đúp vào nút Truy cập để viết code cho sự kiện Click của nút Truy cập

1. private void btn_Load_Click(object sender, EventArgs e)
2. {
3. if (data.OpenConnection())
4. {
5. MessageBox.Show("Truy cập thành công", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
6. data.CloseConnetion();
7. frmHangHoa f_hh = new frmHangHoa();
8. f_hh.Show();
9. }
10. else
11. MessageBox.Show("Truy cập thất bại", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Error);
12. }

Sau đó, nhấn đúp vào nút Thêm CSDL để viết code cho sự kiện Click của nút Thêm
CSDL
1. private void btnAttach_Click(object sender, EventArgs e)
2. {
3. open.Filter = "File (*.mdf)|*.mdf";
4. //Không cho phép chọn nhiều file
5. open.Multiselect = false;
6. //Set caption cho dialog
7. open.Title = "Chon CSDL";
8. //Set tên file mặc định
9. open.FileName = "";
10. //Hiển thị hộp thoại
11. DialogResult dgResult = open.ShowDialog();
12. if (dgResult == DialogResult.OK)
13. {

14. if (sql.AttachDatabases(open.FileName))
15. {
16. MessageBox.Show("Chèn thành công", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
17. listBox1.Items.Clear();
18. bt_dn_Click(sender, e);
19. }
20. else
21. MessageBox.Show("Chèn thành thất", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information);
22. }
23. }

Cuối cùng là các sự kiện nút xóa,thoát.
1. private void btn_Xoa_Click(object sender, EventArgs e)

2. {
3. txtPass.ResetText();
4. txtUser.ResetText();
5. listBox1.Hide();
6. }
7. private void btn_thoat_Click(object sender, EventArgs e)
8. {
9. Close();
10. }
Bước 7: Vào SQL tạo một cơ sở dữ liệu tên là QLBH vậy là chúng ta có thể kết
nối thành công.
=>Vậy là chương trình chúng ta đã hoàn thành sau đây là một số câu hỏi nhỏ dành cho các bạn.
III. Câu hi
1. Câu hỏi Thực hành:

Dựa vào word và video hướng dẫn các bạn hãy viết chương trình kết nối CSDL
dung file cấu hình XML(bài giải trong thư mục DemoKetNoiSQL của nhóm).

2. Câu hỏi lý thuyết:
A. XML là gì? Lợi ích của sử dụng XML trong ngôn ngữ C#?
Trả lời: XML (eXtensible Markup Langue) đóng một vai trò quan trọng
trong .NET. Không chỉ vì .NET cho phép bạn sử dụng XML trong các ứng
dụng của bạn, mà bản thân nó cũng sử dụng XML cho những file cấu hình
và tài liệu mã nguồn, như SOAP, các dịch vụ web và Ado.net. Do đó tìm
hiểu về các xử lý XML trong .Net với ngôn ngữ C# là một điều nên làm
B. Lớp XmlTextWriter dùng để làm gi?
Trả lời: Lớp XmlTextWriter cho phép bạn xuất XML thành một chuỗi,
một file hoặc một đối tượng a TextWriter. Giống như XmlTextReader, nó
là một kiểu forward-only, non-cached. XmlTextWriter có thể cấu hình
cao, cho phép bạn chỉ rõ những thứ như cho phép thục đầu dòng, số thục
đầu dòng, kí tự chỉ dẫn nào được dùng trong các giá trị thuộc tính cho
phép namespace hỗ trợ.
C. Nêu các tên lớp đọc và ghi file XML và giải thích các tên lớp đó
Trả lời:
Tên lớp
Giải thích
XmlReader
Một lớp đọc trừu tượng nhanh và non-cached dữ liệu XML.
XmlReader được thiết kế giống như bộ phân tách SAX.
XmlWriter
Một lớp viết trừu tượng nhanh và non-cached dữ liệu XML trong

một dòng hoặc định dạng file.
XmlTexReader
Mở rộng của XmlReader. Cung cấp chuỗi truy cập nhanh dữ liệu

XML.
XmlTexWriter
Mở rộng của XmlWriter. Phát nhanh các dòng XML.

D. Bạn hãy viết một chuỗi kết nối trong file cấu hình để kết nối C# với CSDL
Trả lời: <connectStr>Data Source=ADMIN\SQLEXPRESS; Initial
Catalog =QLBH; Integrated Security=SSPI;</connectStr>
E. Hãy nêu cách sử dụng Schema property?
Trả lời: Schemas property của XmlValidatingReader chứa một
XmlSchemaCollection, có thể tìm thấy trong không gian
tên System.Xml.Schema. Tập hợp này tổ chức load lại loaded XSD và
XDR schemas. Nó cực nhanh đặc biệc là khi bạn cần kiểm tra sự hợp lệ
của nhiều tài liệu khác nhau, vì sơ đồ sẽ không được load mỗi khi kiểm
tra. Các bước sử dụng thuộc tính này như sau, bạn tạo một đối tượng
XmlSchemaCollection. Phương thức Add(), nằm trong một
XmlSchemaCollection, có bốn quá tải. Bạn có thể truyền nó cho một đối
tượng xuất phát từ XmlSchema, một đối tượng xuất phát từ
XmlSchemaCollection, một chuỗi không gian tên với chuỗi URI của file
sơ đồ và một đối tượng xuất phát từ XmlReader chứa trong sơ đồ.
F. Để sử dụng XmlTexReader cần khai báo thư viện nào?
Trả lời: using System.Xml;

3. Câu hỏi trắc nghiệm
1. Một lớp viết trừu tượng nhanh và non-cached dữ liệu XML trong một dòng
hoặc định dạng file.
A. XmlReader
B. XmlWriter
C. XmlTexReader
2. Một lớp trừu tượng miêu tả một nút đơn trong một tài liệu XML. Lớp cơ sở
cho các lớp khác trong namespace XML.

A. XmlDocument
B. XmlDataDocument
C. XmlNode

3. Thuộc tính HasAttributes sẽ????
A. T
false.
B. Cho bạn biết có bao nhiêu thuộc tính.
C. Trả về một thuộc tính thông qua tên hoặc chỉ mục.
4. Nếu bạn muốn xác nhận một tài liệu XML, bạn sẽ cần phải sử dụng lớp
XmlValidatingReader. Nó chứa các khả năng giống như XmlTextReader (Cả
hai đều xuất phát từ XmlReader) nhưng XmlValidatingReader có thêm thuộc
tính:
A. ValidationType.
B. Schemas.
C. SchemaType.
D. 





MC LC
PHẦN I: GIỚI THIỆU Error! Bookmark not defined.
I. Giới thiệu 23
II. Phân công nhóm 24
PHẦN II: NỘI DUNG 25
I. Giới thiệu thư viện thực thi 25
II. Qui trình tạo thư viện thực thi 26
PHẦN III: KẾT LUẬN 31


PHẦN I: GIỚI THIỆU
I. Gii thiu
Ngày nay, với sự phát triển mạnh mẽ của khoa học kỹ thuật đã dẫn tới sự ra đời của chiếc
máy tính. Nó đã trở thành phương tiện không thể thiếu trong học tập cũng như giải trí…Phát
triển song song với nó là sự ra đời của nhiều chương trình ứng dụng giúp chúng ta quản lý, điều
khiền các hoạt động công việc, học tập của chúng ta nhanh hơn, hiệu quả và hiện đại hơn. Nhưng
nếu một chương trình không có thư viện thực thi thì sẽ thiếu đi tính chuyên nghiệp trong một
phần mềm quản lý và điều này sẽ gây khó khăn cho người quản lý khi phải quản lý nhiều loại
người dùng khác nhau trong hệ thống, khi phát sinh hư hỏng hay đánh mất dữ liệu thì sẽ rất khó
có thể tìm ra ai đã làm điều đó. Vì lý do trên, nhóm chúng em đã chọn đề tài “n thc thi
n lý”.
Trên cơ sở tự nghiên cứu, phát triển và sự giúp đỡ của thầy Huỳnh Lý Thanh Nhàn đã
đóng góp những ý kiến cho việc nghiên cứu của chúng em cũng như trong các thức lập trình. Bài
báo được viết với mục đích giúp cho các bạn đọc biết về công dụng, hiểu quả của thư viện thực
thi cũng như có thể thiết kế được một phần mềm hiệu quả và sáng tạo với những thư viện thực
thi của chính mình.


II. Phân công nhóm

STT
Tên
Công vic
1
Huỳnh Minh Phương
DTH114120
Viết code chương trình, quay video, kiểm tra
và tập hợp tài liệu
2

Võ Thị Thanh Hằng
DTH114094
Soạn word (Phần I: Giới thiệu, Phần II: Nội
dung)
3
Lê Trương Yến Khanh
DTH114103
Soạn word(Phần II: Nội dung, Phần III: Kết
luận)
4
Nguyễn Thị Linh Chi
DTH114154
Soạn slide
5
Nguyễn Văn Thành
DTH114193
Soạn slide







PHN II: NI DUNG

1. Gii thin thc thi
Thư viện thực thi là một file giúp cho người dùng có thể quản lý được những
đối tượng nào đã đăng nhập, đăng xuất ở thời điểm và thực hiện những chức năng nào
trên cơ sở dữ liệu. File thư viện thực thi có thể sử dụng nhiều loại file khác nhau để

lưu trữ nhưng ở đây mình sử dùng file .txt để lưu dữ liệu và truy xuất đơn giản hơn.
Ví dụ: file thực thi text.txt

Cơ chế hoạt động của file thư viện thực thi như sau: Đầu tiên file sẽ lưu lại tên
người dùng đang sử dụng chương trình với quyền tương ứng của họ, thời điểm đối
tượng đăng nhập vào hệ thống và thực hiện trên CSDL nào. Tiếp theo là đối tượng đã
sử dụng chức năng nào trong CSDL đó. Cuối cùng là thời gian đăng xuất.




×