411 Chương 10: Cơ sở dữ liệu // Tạo và cấu hình câu lệnh mới có chứa FOR XML AUTO. SqlCommand com = con.CreateCommand(); com.CommandType = CommandType.Text; com.CommandText = "SELECT CustomerID, CompanyName FROM Customers FOR XML AUTO"; // Mở kết nối cơ sở dữ liệu. con.Open(); // Load dữ liệu XML vào XmlDocument. Cần phải tạo trước một // phần tử gốc để có thể đặt mỗi phần tử hàng kết quả vào đó. XmlReader reader = com.ExecuteXmlReader(); doc.LoadXml("<results></results>"); // Tạo XmlNode từ phần tử XML kế tiếp (được đọc từ reader). XmlNode newNode = doc.ReadNode(reader); while (newNode != null) { doc.DocumentElement.AppendChild(newNode); newNode = doc.ReadNode(reader); } } // Xử lý XmlDocument đã ngắt kết nối. Console.WriteLine(doc.OuterXml); § 7. 7. Nh n bi t t t c các th hi n SQL Server 2000 trên m ngậ ế ấ ả ể ệ ạ Nh n bi t t t c các th hi n SQL Server 2000 trên m ngậ ế ấ ả ể ệ ạ Bạn cần lấy danh sách tất cả các thể hiện của SQL Server 2000 có thể truy xuất được trên mạng. Sử dụng COM Interop để truy xuất chức năng của Microsoft SQLDMO Object Library . Tạo một đối tượng Application rồi gọi phương thức ListAvailableSQLServers của nó. ListAvailableSQLServers sẽ trả về đối tượng NameList , là một tập hợp chứa tên của mỗi đối tượng SQL Server 2000 được tìm thấy trên mạng. 412 Chương 10: Cơ sở dữ liệu Thư viện lớp .NET Framework không có chức năng tìm các SQL Server chưa biết; tuy nhiên, công việc này không mấy khó khăn với Microsoft SQLDMO Object Library (được truy xuất qua COM Interop). Mục 15.6 sẽ trình bày chi tiết cách tạo một Interop Assembly thực hiện việc truy xuất đến một thành phần COM. Nếu đang sử dụng Microsoft Visual Studio .NET, bạn hãy thêm một tham chiếu đến Microsoft SQLDMO Object Library được liệt kê trong thẻ COM của hộp thoại Add Reference (xem hình 10.1). Hình 10.1 Chọn Microsoft SQLDMO Object Library trong hộp thoại Add Reference Nếu không có Visual Studio .NET, bạn hãy sử dụng Type Library Importer (tlbimp.exe) để tạo một Interop Assembly cho file sqldmo.dll (thường nằm trong thư mục \Program Files\Microsoft SQL Server\80\Tools\Binn). Có một vấn đề đã được tìm thấy trong bản gốc SQLDMO Object Library . Để có thể chạy được dự án này, bạn cần phải cài đặt SQL Server Service Pack 2 hoặc mới hơn. Giả sử bạn sử dụng các thiết lập mặc định khi tạo Interop Assembly cho mình, trước hết bạn cần nhập không gian tên SQLDMO . Để lấy được danh sách các SQL Server đang có hiệu lực, bạn hãy tạo một đối tượng SQLDMO.Application và gọi phương thức ListAvailableSQLServers của nó. Mỗi chuỗi trong đối tượng trả về SQLDMO.NameList là tên của một SQL Server đang có hiệu lực. Bạn có thể sử dụng các tên này trong chuỗi kết nối hoặc hiển thị chúng trong một danh 413 Chương 10: Cơ sở dữ liệu sách cho người dùng chọn. Ví dụ dưới đây sẽ hiển thị tên của tất cả các SQL Server có thể truy xuất được trong cửa sổ Console: using System; using SQLDMO; public class SQLDMOExample { public static void Main() { // Thu lấy danh sách tất cả các SQL Server có hiệu lực. SQLDMO.Application app = new SQLDMO.Application(); SQLDMO.NameList names = app.ListAvailableSQLServers(); // Xử lý tập hợp NameList. if (names.Count == 0) { Console.WriteLine("No SQL Servers visible on the network."); } else { // Hiển thị danh sách các SQL Server có hiệu lực. Console.WriteLine("SQL Servers visible : " + names.Count); foreach (string name in names) { Console.WriteLine(" Name : " + name); } } Console.ReadLine(); } } 8. 8. Đ c file Excel v i ADO.NETọ ớ Đ c file Excel v i ADO.NETọ ớ Bạn muốn thu lấy hay chèn dữ liệu vào một tài liệu Microsoft Excel bằng ADO.NET . Sử dụng ODBC .NET provider kết hợp với Microsoft Excel ODBC Driver . 414 Chương 10: Cơ sở dữ liệu Không có OLE DB provider hay provider được-quản-lý nào cho Excel. Tuy nhiên, bạn có thể sử dụng Microsoft Excel ODBC Driver (được cài đặt mặc định cùng với Excel) kết hợp với ODBC .NET provider (đi kèm với .NET Framework 1.1 và Visual Studio .NET 2003). Trong chuỗi kết nối, bạn cần chỉ định driver mà bạn đang sử dụng và tên file Excel. Ví dụ dưới đây chỉ đến file test.xls trong thư mục startup của ứng dụng: private string ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" + Application.StartupPath + "\\test.xls;"; Sau khi kết nối, bạn có thể thực hiện hai kiểu thao tác: SELECT hay INSERT . Thay vì sử dụng bảng, bạn chọn hay chèn dựa vào tên sheet. Tên sheet phải kết thúc bằng dấu đô la ( $ ) và được đặt trong dấu ngoặc vuông (nếu không, sẽ sinh ra lỗi cú pháp). Định dạng bị bỏ qua, và hàng đầu tiên tự động được sử dụng làm các tên cột. Ví dụ dưới đây trích và hiển thị tất cả các hàng trong Sheet1. Hình 10.2 là file Excel gốc. Hình 10.3 là dữ liệu được trình bày trên form. private void ExcelView_Load (System.Object sender, System.EventArgs e) { OdbcConnection Con = new OdbcConnection(ConnectionString); OdbcDataAdapter Adapter = new OdbcDataAdapter("SELECT * FROM [Sheet1$]", Con); DataSet Ds = new DataSet(); try { Con.Open(); Adapter.Fill(Ds, "Sheet1"); } catch (Exception Err) { MessageBox.Show(Err.ToString()); } finally { Con.Close(); } grid.DataSource = Ds.Tables["Sheet1"]; } 415 Chương 10: Cơ sở dữ liệu Hình 10.2 File Excel gốc Hình 10.3 Dữ liệu Excel trong ứng dụng .NET Một cách tiếp cận khác là sử dụng Automation để vận hành Excel thông qua các giao diện COM do nó cung cấp. Cách này đòi hỏi bạn sử dụng COM Interop và các đối tượng của Excel , và chỉ làm việc khi Excel đã được cài đặt trên máy tính. Tuy vậy, nó cung cấp rất nhiều chức năng cho việc tương tác với dữ liệu bảng tính. 9. 9. S d ng Data Form Wizardử ụ S d ng Data Form Wizardử ụ Bạn muốn xây dựng một ứng dụng cơ sở dữ liệu với đầy đủ chức năng nhưng không phải viết bất cứ dòng mã nào. Sử dụng Data Form Wizard . Để sử dụng Data Form Wizard, bạn hãy thực hiện các bước dưới đây: 1. Tạo một dự án mới, chọn mẫu Empty Project. Đặt tên dự án là DataFormWiz. Nhắp OK. 2. Từ thanh trình đơn chính của IDE, chọn Project | Add New Item để hiển thị hộp thoại Add New Item (xem hình 10.4). 416 Chương 10: Cơ sở dữ liệu Hình 10.4 Hộp thoại Add New Item 3. Chọn Data Form Wizard, và giữ nguyên tên mặc định DataForm1.cs. Nhắp Open để thêm Data Form Wizard vào dự án. Ngay khi bạn nhắp Open, Data Form Wizard sẽ khởi chạy. Nhắp Next. 4. Đặt tên cho tập dữ liệu mới là dsDataWizard (xem hình 10.5). Nhắp Next. Hình 10.5 Tạo một tập dữ liệu mới với tên là dsDataWizard 417 Chương 10: Cơ sở dữ liệu 5. Tạo một kết nối mới bằng cách nhắp nút New Connection (xem hình 10.6). Hình 10.6 Nhắp nút New Connection để tạo kết nối mới 6. Kết nối đến cơ sở dữ liệu Northwind của SQL Server trong hộp thoại Data Link Properties (xem hình 10.7). Nhắp OK. 418 Chương 10: Cơ sở dữ liệu Hình 10.7 Hộp thoại Data Link Properties 419 Chương 10: Cơ sở dữ liệu 7. Chọn kết nối vừa tạo (xem hình 10.8). Nhắp Next. Hình 10.8 Chọn kết nối Northwind vừa mới tạo 8. Thêm bảng Categories và Products vào danh sách Selected Item(s) (xem hình 10.9). Nhắp Next. 420 Chương 10: Cơ sở dữ liệu Hình 10.9 Thêm bảng Categories và Products 9. Chúng ta cần đặt tên cho quan hệ giữa các bảng. Gõ CategoriesProducts vào hộp Name. Categories là bảng cha với khóa chính là CategoryID. Products là bảng con với khóa ngoại là CategoryID (xem hình 10.10). Nhắp nút > để thêm quan hệ này vào hộp Relations bên phải. Nhắp Next. . ứng dụng .NET Một cách tiếp cận khác là sử dụng Automation để vận hành Excel thông qua các giao diện COM do nó cung cấp. Cách này đòi hỏi bạn sử dụng COM Interop và các đối tượng của. năng tìm các SQL Server chưa biết; tuy nhiên, công việc này không mấy khó khăn với Microsoft SQLDMO Object Library (được truy xuất qua COM Interop). Mục 15.6 sẽ trình bày chi tiết cách tạo. hoặc mới hơn. Giả sử bạn sử dụng các thiết lập mặc định khi tạo Interop Assembly cho mình, trước hết bạn cần nhập không gian tên SQLDMO . Để lấy được danh sách các SQL Server đang có hiệu lực,