Những phát biểu Select và những lệnh TableDirect

Một phần của tài liệu Bài giảng lập trình CSDL với C (Trang 51 - 58)

Chương 4 THỰC THI CÁC LỆNH CƠ SỞ DỮ LIỆU

4.2 Những phát biểu Select và những lệnh TableDirect

Một TableDirect Command thực ra là một phát biểu SELECT, nó trả về tất cả những hàng và cột của một bảng chỉ định. Một đối tượng Comand có ba phương thức bạn có thể sử dụng để thực thi một phát biểu SELECT hoặc một TableDirect Command.

NHỮNG PHƯƠNG THỨC TRUY XUẤT THÔNG TIN TỪ CƠSỞ DỮ LIỆU

PHƯƠNG THỨC KIỂU TRẢVỀ MÔ TẢ

ExecuteReader() SqlDataReader Được dùng để thực thi một phát biểu SQL SELECT, TableDirect Commands hoặc các lệnh gọi stored procedure ,nó trả về một tập hợp kết quảtrong một đối tượng DataReader.

ExecuteScalar() object Được dùng để thực thi những phát biểu SQL SELECT và trả về một giá trị đơn (bỏ qua nhửng giá trị khác).

Giá trị đơn được trả về như một đối tượng.

ExecuteXmlReader() XmlReader Được dùng để thực thi những phát biểu SQL SELECT và trả về một XML data. Tập hợp kết quả trả về trong một đối tượng XmlReader . chỉ ứng dụng cho lớp SqlCommand.

4.2.1 Thực thi phát biểu Select sử dụng phương thức ExecuteReader()

Hãy xem một thí dụ : thực thi một phát biểu SELECT sử dụng phương thức ExecuteReader(). Phương thức này trả về nột tấp hợp kết quả trong một đối tượng DataReader, mà bạn có thể dùng nó để đọc những hàng được trả về tử cơ sở dữ kiệu. thí dụ , code sau đây khởi tạo những đối tượng cần thiết và thực thi một phát biểu SELECT truy xuất 05 dòng đầu tiên từ bảng Customers:

SqlConnection mySqlConnection =

new SqlConnection("server=localhost;database=Northwind;uid=sa;pwd=sa");

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

mySqlCommand.CommandText =

"SELECT TOP 5 CustomerID, CompanyName, ContactName, Address " +

"FROM Customers " +

"ORDER BY CustomerID";

mySqlConnection.Open();

SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();

Kỹ xảo: bạn chú ý rằng tôi đã không gọi phương thức Open() của đối tượng SqlConnection cho đến khi ngay trước sự gọi phương thức ExecuteReader() của đối tượng SqlCommand.

Đây là sự định trước. Bằng cách mở kết nối vào thời điểm rất cuối cùng, bạn giảm thiểu chi phí thời gian kết nối với cơ sở dữ liệu và do đó gìn giữ những tài nguyên cơ sở dữ liệu.

Tập kết quả được trả về bởi mySqlCommand được lưu trữ trong mySqlDataReader. Và rồi bạn sẽ đọc những hàng từ mySqlDataReader sử dụng phương thức Read(). Phương thức này trả về một giá trị Boolean, true nếu Như có một hàng khác để đọc, ngược lại sẽ trả về giá trị false. Bạn có thể đọc một giá trị riêng rẽ của một cột trong một hàng từ mySqlDataReader

bằng cách thông qua chỉ định tên của cột trong cặp dấu ngoặc vuông. Thí dụ, để đọc cột CustomerID, bạn dùng mySqlDataReader[“CustomerID”].

Chú ý: bạn củng có thể chỉ định cột mà bạn muốn đọc bằng cách đặt một giá trị số (chỉ số cột trong tập hợp) trong cặp dấu ngoặc vuông. Thí dụ, mySqlDataReader[0] cũng trả về giá trị của cột CustomerID. 0 tương ứng với cột đầu tiên trong bảng, như trong thí dụ này là cột CustomerID.

Bạn cũng có thể sử dụng phương thức Read() trong một phát biểu while loop để đọc tuần tự mỗi lượt một hàng,

Như trình bày trong ví dụ dưới đây:

while (mySqlDataReader.Read()) {

Console.WriteLine("mySqlDataReader[\" CustomerID\"] = " + mySqlDataReader["CustomerID"]);

Console.WriteLine("mySqlDataReader[\" CompanyName\"] = " + mySqlDataReader["CompanyName"]);

Console.WriteLine("mySqlDataReader[\" ContactName\"] = " + mySqlDataReader["ContactName"]);

Console.WriteLine("mySqlDataReader[\" Address\"] = " + mySqlDataReader["Address"]);

}

4.2.2 Kiểm soát hành vi của Command sử dụng phương thức ExecuteReader()

Phương thức ExecuteReader() chấp nhận một tham số tùy chọn dùng điều khiển hành vi của Command. Những giá trị của tham số này đến từ lớp liệt kê System.Data.CommandBehavior, những giá trị này được trình bày trong bảng dưới đây.

Giá trị Mô tả

CloseConnection Chỉ định rằng khi đối tượng SqlDataReader được đóng ,đối tượng SqlConnection cũngđóng theo.

Default Chỉ định rằng đối tượng Command có thể trả về nhiều tập hợp kết quả.

KeyInfo Chỉ định đối tượng Command chỉ trả về thông tin về những cột khóachính trong tập hợp kết quả

SchemaOnly Chỉ định đối tượng Command chỉ trả về thông tin liên quan đến các cột.

SequentialAccess Cho phép một đối tượng DataReader đọc những hàng có những cột chứa đựng những giá trị nhị phân lớn. Sự truy cập tuần tự tạo cho DataReader đọc dữ liệu như một luồng. và bạn sử dụng phương thức GetBytes() hay GetChars() của đối tượng DataReader để đọc luồng này.

SingleResult Chỉ định đối tượng Command trả về một tập kết quả đơn.

SingleRow Chỉ địng đối tượng Command trả về một một hàng đơn.

4.2.3 Các thuộc tính hành vi của Command

Bạn sử dụng hành vi lệnh : SingleRow để chỉ định đối tượng Command trả về một hàng đơn.

Thí dụ, cho là bạn có một đối tượng Command tên mySqlCommand với thuộc tính CommandText được gán như sau:

mySqlCommand.CommandText =

"SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice " +

"FROM Products";

Tiếp theo, ví dụ sau đây gán giá trị CommandBehavior. SingleRow Tới phương thức ExecuteReader(), chỉ định đối tượng Command chỉ truy xuất hàng đầu tiên .

SqlDataReader mySqlDataReader =

mySqlCommand.ExecuteReader(CommandBehavior.SingleRow);

Mặc dù phát biểu SELECT trước đó chỉ định tất cả những hàng đều sẽ được truy xuất từ bảng những sản phẩm,

Dưới đây là minh họa hiệu quả của việc sử dụng CommandBehavior. SingleRow.

/*

SingleRowCommandBehavior.cs illustrates how to control the command behavior to return a single row

*/

using System;

using System.Data;

using System.Data.SqlClient;

class SingleRowCommandBehavior {

public static void Main() {

SqlConnection mySqlConnection = new SqlConnection(

"server=localhost;database=Northwind;uid=sa;pwd=sa"

);

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

mySqlCommand.CommandText =

"SELECT ProductID, ProductName, QuantityPerUnit, UnitPrice " +

"FROM Products";

mySqlConnection.Open();

// pass the CommandBehavior.SingleRow value to the

// ExecuteReader() method, indicating that the Command object // only returns a single row

SqlDataReader mySqlDataReader =

mySqlCommand.ExecuteReader(CommandBehavior.SingleRow);

while (mySqlDataReader.Read()) {

Console.WriteLine("mySqlDataReader[\" ProductID\"] = " + mySqlDataReader["ProductID"]);

Console.WriteLine("mySqlDataReader[\" ProductName\"] = " + mySqlDataReader["ProductName"]);

Console.WriteLine("mySqlDataReader[\" QuantityPerUnit\"] = " + mySqlDataReader["QuantityPerUnit"]);

Console.WriteLine("mySqlDataReader[\" UnitPrice\"] = " + mySqlDataReader["UnitPrice"]);

}

mySqlDataReader.Close();

mySqlConnection.Close();

}

The output from this program is as follows:

mySqlDataReader["ProductID"] = 1

mySqlDataReader["ProductName"] = Chai

mySqlDataReader["QuantityPerUnit"] = 10 boxes x 20 bags mySqlDataReader["UnitPrice"] = 18

4.2.4 Thực thi phát biểu TableDirect sử dụng phương thức ExecuteReader()

Khi bạn gán thuộc tính CommandType cho một đối tượng Command là TableDirect, nghĩa là bạn cho biết bạn muốn truy xuất tất cả những hàng và cột của một bảng cụ thể .bạn chỉ định tên của bảng cần truy xuất trong thuộc tính CommandText.

Chú ý: đối tượng SqlCommand không hỗ trợ kiểu Command TableDirect. Thí dụ trong phần này sẽ sử dụng đối tượng OleDbCommand để thay thế.

Như bạn đã biết, bạn có thể sử dụng đối tượng SqlConnection để kết nối với SQL Server.

Bạn cũng có thể sử dụng OleDbConnection để kết nối với SQL Server. Bạn đơn giản gán

SQLOLEDB cho Provider trong string kết nối chuyển vào bộ khởi tạo OleDbConnection.

Thí dụ:

OleDbConnection myOleDbConnection =new OleDbConnection(

"Provider=SQLOLEDB;server=localhost;database=Northwind;" +

"uid=sa;pwd=sa"

);

Tiếp theo, bạn tạo một đối tượng OleDbConnection:

OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();

Sau đó bạn gán CommandType của myOleDbConnection thành CommandType.TableDirect:

myOleDbCommand.CommandType = CommandType.TableDirect;

Tiếp đó bạn chỉ định tên củabảng cần truy xuất sử dụng thuộc tính CommandText. Thí dụ sau gán thuộc tính CommandText của myOleDbCommand là Products:

Kế tiếp bạn mở kết nối cơ sở dữ liệu : myOleDbConnection.Open();

Cuối cùng bạn thực thi myOleDbCommand sử dụng phương thức ExecuteReader() : OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();

Phát biểu SQL đã thực sự thực thi là SELECT * FROM Products, nó truy xuất tất cả những hàng và cột từ bảng Products.

4.2.5 Thực thi phát biểu Select sử dụng phương thức Scalar()

Bạn sử dụng phương thức ExecuteScalar() để thực thi phát biểu SELECT SQL để trả về một giá trị đơn; những giá trị khác bị bỏ qua. Phương thức ExecuteScalar() trả về một giá trị đơn như là một đối tượng của lớp

SystemObject. Một sử dụng cho phương thức ExecuteScalar() sẽ thực hiện một phát biểu SELECT sử dụng một chức năng tổng thể như Count() để lấy số hàng trong một bảng.

NHững chức năng tổng thể này sẽ được trình bày trong chương 4, “giới thệu về lập trình Transact-SQL”.

Thí dụ, phát biểu sau gán cho thuộc tính CommandText của đối tượng mySqlCommand một phát biểu SELECT sử dụng hàm Count(). Phát biểu này trả về tổng số hàng có trong bảng Products:

mySqlCommand.CommandText =

"SELECT COUNT(*) " +

"FROM Products";

Tiếp theo, phát biểu sau thực thi phát biểu SELECT trên sử dụng phương thức ExecutetScalar() :

int returnValue = (int) mySqlCommand.ExecuteScalar();

Bạn chú ý là tôi buộc kiểu đối tượng chung được trả lại từ ExecuteScalar() thành một int trước khi lưu giữ kết quả vào biến int "returnValue".

Code dưới đây minh họa cho sự sử dụng phương thức ExecuteScalar().

Listing 8.5: EXECUTESCALAR.CS /*

ExecuteScalar.cs illustrates how to use the ExecuteScalar() method to run a SELECT statement that returns a single value

*/

using System;

using System.Data;

using System.Data.SqlClient;

class ExecuteScalar {

public static void Main() {

SqlConnection mySqlConnection = new SqlConnection(

"server=localhost;database=Northwind;uid=sa;pwd=sa");

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

mySqlCommand.CommandText =

"SELECT COUNT(*) " +

"FROM Products";

mySqlConnection.Open();

// call the ExecuteScalar() method of the SqlCommand object // to run the SELECT statement

int returnValue = (int) mySqlCommand.ExecuteScalar();

Console.WriteLine("mySqlCommand.ExecuteScalar() = " + returnValue);

mySqlConnection.Close();

} }

4.2.6 Truy xuất dữ liệu XML sử dụng phương thức ExecuteXMLReader()

Bạn sử dụng phương thức ExecuteXmlReader() để thực thi một phát biểu SELECT SQL để trả về dữ liệu XML.

Phương thức ExecuteXmlReader() trả về những kết quả trong một đối tượng XmlReader, và rồi sau đó bạn sẽ sử dụng nó để đọc dữ liệu XML truy xuất được.

Chú ý phương thức ExecuteXmlReader() chỉ áp dụng cho lớp SqlCommand.

SQL Server mở rộng tiêu chuẩn SQL cho phép bạn truy vấn cơ sở dữ liệu và lấy những kết quả về như XML. Đặc biệt, bạn có thể thêm một mệnh đề FOR XML vào cuối của một phát biểu SELECT.Mệnh đề FOR XML

Có cú pháp như dưới đây:

FOR XML

{RAW | AUTO | EXPLICIT}

[, XMLDATA]

[, ELEMENTS]

[, BINARY BASE64]

Một phần của tài liệu Bài giảng lập trình CSDL với C (Trang 51 - 58)

Tải bản đầy đủ (DOC)

(74 trang)
w