[ADO.NET Tutorial] Thêm Parameter vào SqlCommand

Xem: 1354    Tải: 0   Thảo luận: 0   Mục: Cơ sở dữ liệu   Lĩnh vực: Máy tính - công nghệ

0 điểm   ( 6 đánh giá ) File đã được kiểm thử

Khi bạn làm việc với dữ liệu, bạn sẽ thường xuyên cần lọc kết quả dựa trên một vài điều kiện. Thông thường điều này được thực hiện bằng cách lấy dữ liệu nhập từ người dùng và tạo ra câu truy vấn SQL từ đó. Ví dụ, nhà kinh doanh cần xem tất cả hóa đơn trong một khoảng thời gian xác định.  Hoặc một truy vấn khác có thể là lọc các khách hàng theo thành phố.

Như bạn biết, câu truy vấn SQL được gán vào đối tượng SqlCommand chỉ là một chuỗi. Vì thế, nếu bạn muốn tạo một truy vấn lọc, bạn có thể tạo một chuỗi động, nhưng bạn không cần phải làm thế. Đây là một ví dụ tồi cho việc tạo một câu truy vấn lọc.

// don’t ever do this!

SqlCommand cmd = new SqlCommand(“select * from Customers where city = ‘” + inputCity + “‘”;

Đừng bao giờ tạo một câu truy vấn theo cách trên! Biến chứa dữ liệu nhập, inputCity, chỉ đơn giản là lấy dữ liệu từ TextBox trên Windows form hoặc Web Page. Bất kì thứ gì trong TextBox sẽ được đặt vào inputCity và được thêm vào câu SQL của bạn. Cách làm này có thể bị hacker thay thế chuỗi này bằng những thứ gây hại (SQL Injection). Trong trường hợp xấu nhất, bạn có thể bị lấy toàn quyền điều khiển của máy tính.

Thay vì tạo một chuỗi động, như bạn thấy ở ví dụ trên, hãy sử dụng parameter. Bất kì thứ gì được đặt vào một parameter sẽ được coi là một trường dữ liệu, không phải là một phần của câu lệnh SQL, điều này giúp ứng dụng của bạn an toàn hơn.

(Mô hình kết hợp giữa SqlParameter và SqlCommand)

Dùng câu truy vấn với parameter bao gồm ba bước sau:

  1. Tạo một SqlCommand từ một câu lệnh có parameter.
  2. Khai báo một đối tượng SqlParameter, gán giá trị thích hợp cho nó.
  3. Gán đối tượng SqlParameter vào property Parameters của đối tượng SqlCommand.

Các phần sau hướng dẫn từng bước quá trình trên.

Tạo một đối tượng SqlCommand sử dụng Parameter

Bước đầu tiên là tạo một câu lệnh chứa các parameter placeholder (tên của parameter). Tên này sẽ được thay thế bởi giá trị thực sự của parameter khi SqlCommand thực thi. Cú pháp đúng của một parameter là dùng kí hiệu tiền tố ‘@’ trong tên của parameter như sau:

// 1. declare command object with parameter
SqlCommand cmd = new SqlCommand(“select * from Customers where city = @City”, conn);

Trong constructor của SqlCommand trên, tham số đầu tiên chứa một khai báo parameter, @City. Ví dụ này dùng một parameter, nhưng bạn có thể có nhiều parameter tùy theo số lượng bạn cần để tạo cây truy vấn. Mỗi parameter sẽ so khớp với một đối tượng SqlParameter được gán vào đối tượng SqlCommand.

Khai báo một đối tượng SqlParameter

Mỗi parameter trong câu lệnh SQL phải được định nghĩa. Đây là mục đích của kiểu SqlParameter. Mã nguồn của bạn phải định nghĩa một đối tượng SqlParameter cho mỗi parameter trong câu lệnh SQL của đối tượng SqlCommand. Đoạn mã sau định nghĩa một SqlParameter cho parameter @City trong phần trước:

// 2. define parameters used in command object
SqlParameter param  = new SqlParameter();
param.ParameterName = “@City”;
param.Value         = inputCity;

Lưu ý rằng property ParameterName của đối tượng SqlParameter phải được viết đúng với parameter được dùng trong câu lệnh SQL của SqlCommand. Bạn cũng phải xác định giá trị cho các parameter. Khi đối tượng SqlCommand được thực thi, parameter sẽ được thay thế bằng giá trị của nó.

Kết hợp đối tượng SqlParameter với đối tượng SqlCommand

Với mỗi parameter được định nghĩa trong câu lệnh SQL của đối tượng SqlCommand phải được định nghĩa một SqlParameter. Bạn cũng phải để đối tượng SqlCommand biết về SqlParameter bằng cách gán đối tượng SqlParameter cho property Parameters của đối tượng SqlCommand. Dòng mã sau cho thấy cách làm điều này:

// 3. add new parameter to command object
cmd.Parameters.Add(param);

Đối tượng SqlParameter là tham số trong phương thức Add() của property Parameters của đối tượng SqlCommand trên. Bạn phải thêm một SqlParameter duy nhất cho mỗi parameter đã định nghĩa trong câu lệnh SQL của đối tượng SqlCommand.

Kết hợp tất cả lại

Bạn đã biết cách dùng các đối tượng SqlCommand và SqlDataReader. Đoạn mã sau minh họa một chương trình làm việc sử dụng các đối tượng SqlParameter. Hiện tại, mọi thứ đã quen thuộc với bạn, ngoại trừ các phần được giới thiệu trong bài học này:

Listing 1: Adding Parameters to Queries

 	using System;
 	using System.Data;
 	using System.Data.SqlClient;
 	 
 	class ParamDemo
 	{
 	    static void Main()
 	    {
 	        // conn and reader declared outside try
	        // block for visibility in finally block
 	        SqlConnection conn   = null;
 	        SqlDataReader reader = null;
 	 
 	        string inputCity = "London";
 	 
 	        try
 	        {
 	            // instantiate and open connection
 	            conn =  new
 	                SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI");
 	            conn.Open();
 	 
 	            // don't ever do this!
 	//          SqlCommand cmd = new SqlCommand(
 	//              "select * from Customers where city = '" + inputCity + "'";
 	 
 	            // 1. declare command object with parameter
 	            SqlCommand cmd = new SqlCommand(
 	                "select * from Customers where city = @City", conn);
 	 
 	            // 2. define parameters used in command object
 	            SqlParameter param  = new SqlParameter();
 	            param.ParameterName = "@City";
 	            param.Value         = inputCity;
 	 
 	            // 3. add new parameter to command object
 	            cmd.Parameters.Add(param);
 	 
 	            // get data stream
 	            reader = cmd.ExecuteReader();
 	 
 	            // write each record
 	            while(reader.Read())
 	            {
 	                Console.WriteLine("{0}, {1}",
 	                    reader["CompanyName"],
 	                    reader["ContactName"]);
 	            }
 	        }
 	        finally
 	        {
 	            // close reader
 	            if (reader != null)
 	            {
 	                reader.Close();
 	            }
 	 
 	            // close connection
 	            if (conn != null)
 	            {
 	                conn.Close();
 	            }
 	        }
 	    }
 	}

Đoạn mã trong Listing 1 đơn giản là lấy các dòng dữ liệu của mỗi khách hàng sống tại London. Điều này giúp bảo mật hơn khi dùng parameter. Ngoài parameter, đoạn mã trên chỉ chứa các kĩ thuật mà bạn đã được học trong các bài trước.

Tổng kết

Bạn nên dùng parameter để tạo truy vấn lọc để tăng tính an toàn. Việc sử dụng parameter bao gồm 3 bước: định nghĩa parameter trong chuỗi lệnh của SqlCommand, khai báo đối tượng SqlParameter với các property tương ứng, và gán đối tượng SqlParameter cho đối tượng SqlCommand. Khi SqlCommand thực thi, các parameter sẽ được thay thế với giá trị của đối tượng SqlParameter.

[ADO.NET Tutorial] Thêm Parameter vào SqlCommand

[ADO.NET Tutorial] Thêm Parameter vào SqlCommand Đăng ngày 19-02-2014  (The C# Station ADO.NET Tutorial) Các mục tiêu của lesson này: tìm hiểu về khái niệm tham số (parameter), lợi ích của việc sử dụng parameter, cách tạo và sử dụng parameter với đối tượng SqlCommand. 5/10 1354

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 
Hỗ trợ kỹ thuật cho thành viên:
Tổng đài: (+84) 246. 32.979.36
Số di động (Hotline): 0969.091.265
Thời gian làm việc:
Sáng: 8h-12h; Chiều: 13h30-17h30
(Nghỉ chiều T7, CN và các ngày lễ, tết)
Chat với Megacode
https://www.facebook.com/megacodevn
File gợi ý cho bạn
File tải nhiều nhất
Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2016. All rights reserved. Bản quyền thuộc VinaGon
Địa chỉ: Số 38 Hàng Bè, Hàng Bạc, Hoàn Kiếm, Hà Nội.
Văn phòng giao dịch: Phòng 28, Tầng 6, HH1A Linh Đàm, Hoàng Mai, Hà Nội
Email: info@vinagon.com | Website: www.vinagon.com | Điện thoại: (+844) 6. 32.979.36;