1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Cơ sở dữ liệu Trong Microsoft .NET Framework phần 3 pdf

9 517 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cơ sở dữ liệu Trong Microsoft .NET Framework phần 3
Trường học University of Information Technology
Chuyên ngành Database Management
Thể loại Tài liệu
Năm xuất bản 2023
Thành phố Ho Chi Minh City
Định dạng
Số trang 9
Dung lượng 176,27 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

GetFieldType Lấy đối tượng System.Type mô tả kiểu dữ liệu của giá trị chứa trong cột cụ thể cột này được chỉ định bằng một chỉ số nguyên—đánh số từ 0.. Khi đã hoàn tất với data-reader, b

Trang 1

Bảng 10.5 Các thành viên thông dụng của các lớp data-reader

Thuộc tính

FieldCount Lấy số cột trong hàng hiện tại

IsClosed Trả về true nếu IDataReader bị đóng; false nếu nó hiện

đang mở

Item

Trả về một đối tượng mô tả giá trị của cột cụ thể trong hàng hiện tại Cột có thể được chỉ định bằng một chỉ số nguyên (đánh số từ 0) hoặc một chuỗi chứa tên cột Bạn phải ép giá trị trả về thành kiểu phù hợp Đây là bộ chỉ

mục (indexer) cho các lớp data-reader

Phương thức

GetDataTypeName Lấy tên của kiểu dữ liệu đối với một cột cụ thể

GetFieldType

Lấy đối tượng System.Type mô tả kiểu dữ liệu của giá trị chứa trong cột cụ thể (cột này được chỉ định bằng một chỉ số nguyên—đánh số từ 0)

GetName Lấy tên của cột cụ thể (cột này được chỉ định bằng một

chỉ số nguyên—đánh số từ 0)

GetOrdinal Lấy số thứ tự cột (đánh số từ 0) ứng với một tên cột cụ thể GetSchemaTable Trả về đối tượng System.Data.DataTable chứa siêu dữ liệu mô tả các cột có trong IDataReader IsDBNull Trả về true nếu giá trị trong cột cụ thể chứa giá trị null; nếu không thì trả về false

NextResult

Nếu IDataReader chứa nhiều tập kết quả vì có nhiều lệnh được thực thi, NextResult sẽ di chuyển đến các tập kết quả kế tiếp Theo mặc định, IDataReader được bố trí tại tập kết quả đầu tiên

Read Dịch reader đến bản ghi kế tiếp Reader luôn bắt đầu tại bản ghi đầu tiên

Data-reader Server và Oracle cũng chứa các phương thức thực hiện việc lấy dữ liệu thuộc

các kiểu dữ liệu đặc trưng của data-source Ví dụ, SqlDataReader chứa các phương thức

Trang 2

như GetSqlByte, GetSqlDecimal, và GetSqlMoney, và OracleDataReader chứa các phương thức như GetOracleLob, GetOracleNumber, và GetOracleMonthSpan Bạn hãy

tham khảo tài liệu NET Framework SDK để biết thêm chi tiết

Khi đã hoàn tất với data-reader, bạn nên gọi phương thức Close để có thể sử dụng lại kết nối cơ sở dữ liệu IDataReader thừa kế System.IDisposable; nghĩa là mỗi lớp data-reader đều hiện thực phương thức Dispose Phương thức này sẽ tự động gọi Close, cho nên lệnh using là một cách rất rõ ràng và hiệu quả khi sử dụng data-reader

Ví dụ dưới đây mô tả cách sử dụng data-reader để xử lý nội dung của hai tập kết quả

được trả về bởi việc thực thi một truy vấn gồm hai lệnh SELECT Tập kết quả đầu tiên

được liệt kê và hiển thị trong cửa sổ Console Tập kết quả thứ hai được duyệt qua để tìm

và hiển thị thông tin siêu dữ liệu

using System;

using System.Data;

using System.Data.SqlClient;

public class DataReaderExample {

public static void Main() {

// Tạo đối tượng SqlConnection mới

using (SqlConnection con = new SqlConnection()) {

// Cấu hình chuỗi kết nối của đối tượng SqlConnection

con.ConnectionString = "Data Source = localhost;" +

"Database = Northwind; Integrated Security=SSPI";

// Tạo và cấu hình câu lệnh mới

SqlCommand com = con.CreateCommand();

com.CommandType = CommandType.Text;

com.CommandText = "SELECT BirthDate,FirstName,LastName " +

"FROM Employees ORDER BY BirthDate; " +

"SELECT * FROM Employees";

// Mở kết nối cơ sở dữ liệu và thực thi câu lệnh

con.Open();

// Thực thi câu lệnh và thu lấy SqlReader

using (SqlDataReader reader = com.ExecuteReader()) {

Trang 3

// Xử lý tập kết quả đầu tiên

// và hiển thị nội dung của tập kết quả

Console.WriteLine("Employee Birthdays (By Age).");

while (reader.Read()) {

Console.WriteLine("{0,18:D} - {1} {2}",

reader.GetDateTime(0), // Lấy dữ liệu định kiểu

reader["FirstName"], // Sử dụng chỉ số chuỗi

reader[2]); // Sử dụng chỉ số thứ tự

}

// Xử lý tập kết quả thứ hai và hiển thị chi tiết

// về các cột và các kiểu dữ liệu trong tập kết quả

reader.NextResult();

Console.WriteLine("Employee Table Metadata.");

for (int field = 0; field < reader.FieldCount; field++) {

Console.WriteLine(" Column Name:{0} Type:{1}",

reader.GetName(field),

reader.GetDataTypeName(field));

}

}

}

Console.ReadLine();

}

}

1.1 Thu lấy tài liệu XML từ truy vấn SQL Server

V Bạn cần thực thi một truy vấn dựa trên SQL Server 2000 hoặc MSDE và lấy các kết quả dạng XML

# Sử dụng mệnh đề FOR XML trong truy vấn SQL để trả về kết quả dạng XML

Thực thi câu lệnh bằng phương thức SqlCommand.ExecuteXmlReader, kết quả trả về là một đối tượng System.Xml.XmlReader mà thông qua nó bạn có

thể truy xuất dữ liệu XML

Trang 4

SQL Server 2000 và MSDE trực tiếp hỗ trợ XML Bạn chỉ cần thêm mệnh đề FOR XML

AUTO vào cuối truy vấn SQL để cho biết rằng các kết quả sẽ được trả về ở dạng XML Theo mặc định, dạng XML này không phải là một tài liệu XML đầy đủ Thay vào đó, nó trả về kết quả của mỗi bản ghi theo từng phần tử (element) riêng rẽ, với tất cả các trường (field) đều là đặc tính (attribute) Ví dụ, truy vấn sau đây:

SELECT CustomerID, CompanyName FROM Customers FOR XML AUTO

sẽ trả về XML với cấu trúc như sau:

<Customers CustomerID="ALFKI" CompanyName="Alfreds Futterkiste"/>

<Customers CustomerID="ANTON" CompanyName="Antonio Moreno Taquería"/>

<Customers CustomerID="GOURL" CompanyName="Gourmet Lanchonetes"/>

§

Bạn có thể thêm từ khóa ELEMENTS vào cuối truy vấn để định dạng kết quả theo các phần tử lồng nhau Ví dụ, truy vấn sau đây:

SELECT CustomerID, CompanyName FROM Customers FOR XML AUTO,

ELEMENTS

sẽ trả về XML với cấu trúc như sau:

<Customers>

<CustomerID>ALFKI</CustomerID>

<CompanyName>Alfreds Futterkiste</CompanyName>

</Customers>

<Customers>

<CustomerID>ANTON</CustomerID>

<CompanyName>Antonio Moreno Taquería</CompanyName>

</Customers>

<Customers>

<CustomerID>GOURL</CustomerID>

<CompanyName>Gourmet Lanchonetes</CompanyName>

</Customers>

§

# Bạn cũng có thể định dạng kết quả một cách chi tiết hơn bằng cú pháp FOR XML EXPLICIT Ví dụ, cú pháp này cho phép bạn chuyển một vài trường

(field) thành đặc tính (attribute) và các trường khác thành phần tử (element) Bạn hãy tham khảo một quyển sách chuyên về SQL Server để biết thêm chi tiết

Ví dụ dưới đây trình bày cách lấy kết quả dạng XML bằng mệnh đề FOR XML và

phương thức ExecuteXmlReader Chú ý rằng, kết nối không thể được sử dụng cho bấy kỳ câu lệnh nào khác trong khi XmlReader đang mở Bạn nên xử lý kết quả càng nhanh càng tốt và phải luôn đóng XmlReader lại (Chương 5 có rất nhiều ví dụ trình bày cách sử dụng lớp XmlReader)

Trang 5

using System;

using System.Xml;

using System.Data;

using System.Data.SqlClient;

public class XmlQueryExample {

public static void Main() {

// Tạo đối tượng SqlConnection mới

using (SqlConnection con = new SqlConnection()) {

// Cấu hình chuỗi kết nối của đối tượng SqlConnection

con.ConnectionString = "Data Source = localhost;" +

"Database = Northwind; Integrated Security=SSPI";

// 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";

// Khai báo XmlReader để nó có thể được tham chiếu trong // khối finally (bảo đảm đóng nó lại sau khi sử dụng)

XmlReader reader = null;

try {

// Mở kết nối cơ sở dữ liệu

con.Open();

// Thực thi câu lệnh và lấy XmlReader

// để truy xuất các kết quả

reader = com.ExecuteXmlReader();

while (reader.Read()) {

Console.Write("Element: " + reader.Name);

if (reader.HasAttributes) {

for (int i = 0; i < reader.AttributeCount; i++) {

Trang 6

reader.MoveToAttribute(i);

Console.Write(" {0}: {1}",

reader.Name, reader.Value);

}

reader.MoveToElement();

Console.WriteLine();

}

}

} catch (Exception ex) {

Console.WriteLine(ex.ToString());

} finally {

// Bảo đảm reader đã đóng

if (reader != null) reader.Close();

}

}

Console.ReadLine();

}

}

Dưới đây là một vài kết xuất từ ứng dụng thử nghiệm này:

Element: Customers CustomerID: ALFKI CompanyName: Alfreds Futterkiste

Element: Customers CustomerID: ANTON CompanyName: Antonio Moreno Taquería

Element: Customers CustomerID: GOURL CompanyName: Gourmet Lanchonetes

Thay vì làm việc với XmlReader và truy xuất dữ liệu một cách tuần tự, bạn có thể đọc dữ

liệu XML vào System.Xml.XmlDocument Theo cách này, tất cả dữ liệu được lấy vào bộ

nhớ, và kết nối cơ sở dữ liệu có thể đóng lại Kế đó, bạn có thể tiếp tục tương tác với tài

liệu XML (Chương 5 có rất nhiều ví dụ trình bày cách sử dụng lớp XmlDocument) Dưới

đây là đoạn mã mà bạn sẽ cần:

XmlDocument doc = new XmlDocument();

// Tạo đối tượng SqlConnection mới

using (SqlConnection con = new SqlConnection()) {

Trang 7

// Cấu hình chuỗi kết nối của đối tượng SqlConnection

con.ConnectionString = "Data Source = localhost;" +

"Database = Northwind; Integrated Security=SSPI";

// 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);

§

1.2 Nhận biết tất cả các thể hiện SQL Server 2000 trên mạng

V 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

Trang 8

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

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

The image part with relationship ID rId5 was not found in the file.

Trang 9

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 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();

}

Ngày đăng: 26/01/2014, 04:20

HÌNH ẢNH LIÊN QUAN

Hình 10.1 Chọn Microsoft SQLDMO Object Library trong hộp thoại Add Reference - Tài liệu Cơ sở dữ liệu Trong Microsoft .NET Framework phần 3 pdf
Hình 10.1 Chọn Microsoft SQLDMO Object Library trong hộp thoại Add Reference (Trang 8)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm