SlideShare a Scribd company logo
1 of 11
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 1 of 11
Ở bài viết này mình sẽ hướng dẫn các bạn cách tạo một mệnh lệnh (command) và thực thi trên cơ sở dữ
liệu (database).
Tạo một mệnh lệnh (CREATING A COMMAND)
Có rất nhiều cách ngoài cách sử dụng SqlCommand nhưng mình sẽ dùng cách này để làm ví dụ vì nó
được cung cấp tốt nhất trong việc liên kết với cơ sở dữ liệu SQL.
Mở Visual C# chọn Console Application và dùng thử code sau để phân tích :
[code]
using System;
using System.Data;
using System.Data.SqlClient;
class MenhLenh
{
public static void Main()
{
// tạo một kết nối
SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
Integrated Security = True;
Database = Northwind");
// tạo một đối tượng giữ lệnh cần thực thi
SqlCommand cmd = new SqlCommand();
Console.WriteLine("Command created.");
try
{
// mở kết nối
conn.Open();
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
finally
{
// đóng kết nối
conn.Close();
Console.WriteLine("Connection Closed.");
}
}
}
[/code]
Bài này chính xác là bài mình đã giới thiệu và dùng làm ví dụ trong bài trước „Tạo một kết nối tới cơ sở
dữ liệu‟ cho nên mình không nói thêm gì về phần đóng/mở kết nối tới hệ quản trị cơ sở dữ liệu. Chỉ khác
ở chỗ có thêm 2 dòng code tạo thêm mệnh lệnh :
[code]
// tạo một đối tượng giữ lệnh cần thực thi
SqlCommand cmd = new SqlCommand();
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 2 of 11
Console.WriteLine("Command created.");
[/code]
Ở đây thông qua lớp „SqlCommand‟ mình tạo một đối tượng để nắm giữ thông tin về lệnh. Sau khi tạo
xong thì thông báo ra Console “Command created.” Chương trình về cơ bản là vậy rất đơn giản dễ hiểu.
Đó là cách tạo đối tượng nắm giữ mệnh lệnh. Mệnh lệnh tạo ra chỉ có tác dụng KHI VÀ CHỈ KHI nó
được chỉ định thực thi trong kết nối nào. Vì vậy phải cho nó đi kèm với một kết nối tồn tại để tạo và thi
hành mệnh lệnh được viết ra.
Ví dụ sau mình sẽ minh họa các gán mệnh lệnh vào một kết nối.
[code]
using System;
using System.Data;
using System.Data.SqlClient;
class MenhLenh
{
public static void Main()
{
// tạo một kết nối
SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
Integrated Security = True;
Database = Northwind");
// tạo một đối tượng giữ lệnh cần thực thi
SqlCommand cmd = new SqlCommand();
Console.WriteLine("Command created.");
try
{
// mở kết nối
conn.Open();
// gán mệnh lệnh vào kết nối
cmd.Connection = conn;
Console.WriteLine("Connected command to connection !");
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
finally
{
// đóng kết nối
conn.Close();
Console.WriteLine("Connection Closed.");
}
}
}
[/code]
Bạn dễ thấy ví dụ này cũng chính là ví dụ ban đầu nhưng mình chỉ có thay đổi thêm một chút trong khối
lệnh „try‟
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 3 of 11
[code]
// gán mệnh lệnh vào kết nối
cmd.Connection = conn;
Console.WriteLine("Connected command to connection !");
[/code]
Sau khi ở trên mình đã tạo ra một kết nối tới cơ sở dữ liệu và một đối tượng nắm giữ mệnh lệnh thi hành
thì bên dướ mình thử gán mệnh lệnh với kết nối.
Trong đối tượng của mệnh lệnh có một thuộc tính (properties) để gán vào một kết nối nào đó :
CommandObject.Connection = ConnectionObject;
Như ở trên thì sau khi gán kết nối xong thì Console sẽ thông báo ra kết quả là gán mệnh lệnh vào kết nối
thành công.
Câu hỏi đặt ra ở đây là : Tại sao không gán kết nối ngay khi tạo ra đối tượng kết nối mà phải cho vào khối
„try..catch..finally‟ làm cái gì ?
Câu trả lời rất dễ hiểu: Bạn thử nghĩ xem sau khi bạn tạo kết nối thì muốn kích hoạt và kiểm tra kết nối
có tốt hay không thì phải ném vào trong khối „try..catch‟. Giả sử mà bạn khai báo gán mệnh lệnh ở ngay
trước khối „try..catch‟ và kết nối thành công thì không có lỗi gì cả. Nhưng trong trường hợp nếu có lỗi
biến cố bất ngờ xảy ra thì khi gán mệnh lệnh vào kết nối sẽ có lỗi và chương trình sẽ ngưng hoạt động và
ở tình trạng treo mà vẫn tiêu thụ tài nguyên máy, rất lãng phí. Vì vậy mà tốt nhất gán trong khối
„try..catch‟ sau khi mở kết nối để gặp lỗi thì ta có thể biết được lỗi và nguyên nhân gây lỗi và sửa
(debug).Giải thích thế này không biết có hiểu không ^_^!
Tuy nhiên nếu bạn chắc chắn là kết nối đảm bảo tốt thì bạn có thể gán mệnh lệnh vào kết nối ngay từ đầu
và rút ngắn lại code
[code]
SqlCommand cmd = conn.CreateCommand();
[/code]
Tương đương với 2 dòng code
[code]
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
[/code]
Bạn đã tạo được đối tượng nắm giữ mệnh lệnh và gán được vào kết nối, bây giờ phải viết mệnh lệnh cho
đối tượng.
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 4 of 11
Ta dùng thuộc tình „CommandObject.CommandText‟ để tạo một lệnh cần thực thi với cơ sở dữ liệu.
Bạn vẫn dùng code ở trên nhưng chỉ thay đổi đi phần code trong khối „try..catch‟ bằng phần code dưới
đây nhé :
[code]
try
{
// mở kết nối
conn.Open();
// gán mệnh lệnh vào kết nối
cmd.Connection = conn;
Console.WriteLine("Connected command to connection !");
// tạo một lệnh cho đối tượng
cmd.CommandText = @" SELECT count(*) FROM Employees ";
Console.WriteLine(" Ready to execute SQL command : {0} ",
cmd.CommandText);
}
[/code]
Bạn để ý ở đây tớ có thêm 2 dòng code khác bên dưới.
„CommandText‟ ở đây là một lệnh SQL, nếu bạn viết cái gì đó khác hơn là một câu lệnh SQL thì sẽ có lỗi
thông báo khi thực thi lệnh này, đây là đoạn trick nếu mà bạn không thông thạo về cấu trúc câu lệnh SQL .
Xem bài 1 „Cơ bản về SQL cho người mới bắt đầu‟ để biết chút cơ bản ban đầu về SQL nhé.
Thực thi mệnh lệnh (EXECUTING COMMAND)
Bây giờ thử thực thi câu lệnh nhé xem kết quả thế nào. Nhưng khi thực thi một lệnh thì kết quả sẽ cho ra
khác nhau nếu như bạn sử dụng phương thức thực thi (execution method) khác nhau. Có 4 cách thực thi
lệnh theo bảng sau :
Phương thức (Method) Giá trị trả về (Return Value)
ExecuteNonQuey() Không trả về gì vì không phải query
ExecuteScalar() Một giá trị duy nhất
ExecuteReader() Không hoặc nhiều hàng
ExecuteXmlReader XML
À bạn có thể hiểu query là một biểu thức có giá trị trả về.
Bây giờ vẫn bài ở trên tớ dùng „ExecuteScalar‟ để thu giá trị lấy về
[code]
using System;
using System.Data;
using System.Data.SqlClient;
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 5 of 11
class MenhLenh
{
public static void Main()
{
// tạo một kết nối
SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
Integrated Security = True;
Database = Northwind");
// tạo một đối tượng giữ lệnh cần thực thi
SqlCommand cmd = new SqlCommand();
Console.WriteLine("Command created.");
try
{
// mở kết nối
conn.Open();
// gán mệnh lệnh vào kết nối
cmd.Connection = conn;
Console.WriteLine("Connected command to connection !");
// tạo một lệnh cho đối tượng
cmd.CommandText = @"SELECT count(*) FROM Employees ";
Console.WriteLine("Ready to execute SQL command : {0} ",
cmd.CommandText);
// Thực thi câu lệnh
Console.WriteLine("Number of Employees is {0} ",
cmd.ExecuteScalar());
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
finally
{
// đóng kết nối
conn.Close();
Console.WriteLine("Connection Closed.");
}
}
}
[/code]
Ở đây bạn sẽ thu kết quả là : „Number of Employees is 9‟.
Bạn học thêm một câu lệnh SQL mới luôn nhé. Để đếm số dòng (rows) trong một bảng ta dùng tham số
„count(*)‟
Cách gọi :
[code]
SELECT count(*) FROM <table_name>
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 6 of 11
[/code]
Giá trị trả về là kiểu „Object‟ và có một kết quả nên sử dụng „ExecuteScalar‟.
Bạn nên chú ý ở đây : „ExecuteScalar‟ trả về kiểu „Object‟ và trong môi trường .NET Framework thì cơ
sở dữ liệu có thể chứa bất cứ kiểu dữ liệu nào. Khi đưa ra Console dùng „WriteLine‟ thì tất cả các kiểu
đều bị convert sang kiểu kí tự in ra màn hình hết.
Bạn có thể chuyển giá trị thu được về một kiểu nào đó nhưng nếu convert không hợp lệ thì sẽ có
„Runtime Error : Invaliad type cast‟ hay gì đó đại loại như thế.
Mình giả sử bài ở trên mình muốn giá trị thu về kiểu „Int‟ thì mình code như sau :
[code]
int count = (int)cmd.ExecuteScalar();
Console.WriteLine(“ Number of Employees is {0} “, count);
[/code]
Nếu như mình vẫn dùng thêm cái code convert ở ngay trên đây và thay đổi đi câu lệnh thực thi
(commandText) thành :
[code]
cmd.CommandText = “SELECT firstname FROM employees WHERE lastname = „Davolio‟
[/code]
Thì với ExecuteScalar() sẽ trả về kiểu Object có giá trị là “Nancy” thực chất là kiểu String (C#) nhưng mà
ở trên bạn lại cast nó sang kiểu „Int‟ và màn hình sẽ thông báo lỗi như sau
Unhandled Exception : System.InvalidCastException: Specified cast is not valid.
Kiểu „String‟ không thể bị convert sang kiểu „Int‟.
Bây giờ chúng ta cùng thực hiện câu lệnh thu về nhiều kết quả xem. Tất nhiên là sử dụng :
ExecuteReader()
[code]
using System;
using System.Data;
using System.Data.SqlClient;
class MenhLenh
{
public static void Main()
{
// tạo một kết nối
SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 7 of 11
Integrated Security = True;
Database = Northwind");
// tạo một đối tượng giữ lệnh cần thực thi
SqlCommand cmd = new SqlCommand();
Console.WriteLine("Command created.");
try
{
// mở kết nối
conn.Open();
// gán mệnh lệnh vào kết nối
cmd.Connection = conn;
Console.WriteLine("Connected command to connection !");
// tạo một lệnh cho đối tượng
cmd.CommandText = @"SELECT firstname, lastname FROM Employees ";
Console.WriteLine("Ready to execute SQL command : {0} ",
cmd.CommandText);
// Thực thi câu lệnh
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(" Employee name : {0} {1} ",
reader.GetValue(0), reader.GetValue(1));
}
reader.Close();
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
finally
{
// đóng kết nối
conn.Close();
Console.WriteLine("Connection Closed.");
}
}
}
[/code]
Ở đây ta dùng query đẻ lấy về họ tên trong bảng Employees.
Và phương thức : ExecuteReader() trả về giá trị là một đối tượng SqlDataReader. Vì thế ở đây tớ tạo ra
một đối tượng SqlDataReader là reader để thu nhận tất cả kết quả lấy dược từ database. Kết quả sẽ theo
từng dòng (row) và mỗi lần đọc „reader.Read()‟ thì nó chứa giá trị có được từ bảng theo dòng và chi nắm
giữ thông tin lấy chứ không phải tất cả các cột có trong bảng. Ví dụ ở đây tớ chỉ lấy 2 cột họ và tên thì
mỗi hàng trong reader khi Read() thì chỉ có 2 value tương ứng với Value(1) là họ và Value(0) là tên. Nếu
như ở đây mà bạn GetValue(i) với i khác 0 và 1 thì chương trình sẽ treo . Phương thức Read() sau mỗi lần
thực hiện thì nó sẽ trả về hàng tiếp theo. Do dó để đọc hết kết quả thu được ở đây tớ dùng vòng lặp „while‟
đọc cho đến khi không còn hàng nào nữa thì thôi.
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 8 of 11
Để thực thi một biểu thức thì ta sử dụng : ExecuteNonQuery(). Đơn giản vì biểu thức chẳng trả về giá trị
gì cả. Ví dụ bên dưới minh họa cách dùng :
[code]
using System;
using System.Data;
using System.Data.SqlClient;
public class ThiHanhMenhLenh
{
public static void Main()
{
SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
Integrated Security = True;
Database = Northwind");
string querySelect = @"SELECT count(*) FROM Employees";
string queryInsert = @"INSERT INTO Employees (firstname,lastname)
VALUES ('Pete','Houston')";
string queryDelete = @"DELETE FROM Employees WHERE firstname = 'Pete'
AND lastname = 'Houston'";
SqlCommand cmdSelect = new SqlCommand(querySelect, conn);
SqlCommand cmdInsert = new SqlCommand(queryInsert, conn);
SqlCommand cmdDelete = new SqlCommand(queryDelete, conn);
try
{
conn.Open();
Console.WriteLine("Open connection !");
Console.WriteLine("Before INSERT : ");
Console.WriteLine(" Number of employees : {0} ",
cmdSelect.ExecuteScalar());
cmdInsert.ExecuteNonQuery();
Console.WriteLine("Insert complete !");
Console.WriteLine("After INSERT : ");
Console.WriteLine(" Number of employees : {0} ",
cmdSelect.ExecuteScalar());
cmdDelete.ExecuteNonQuery();
Console.WriteLine("Delete complete !");
Console.WriteLine("After DELETE : ");
Console.WriteLine(" Number of employees : {0} ",
cmdSelect.ExecuteScalar());
}
catch (SqlException sqle)
{
Console.WriteLine(sqle.ToString());
}
finally
{
conn.Close();
Console.WriteLine("Close connection !");
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 9 of 11
}
}
}
[/code]
Như bạn thấy ở đây mình tạo ra hai đối tượng cmdInsert và cmdDelete dùng để thực thi hai biểu thức thi
hành xóa và chèn thêm giá trị vào bảng, vì thế mà nó không có giá trị trả về và dùng ExecuteNonQuery.
Việc thực thi mệnh lệnh không có gì khó khăn cả và phụ thuộc vào mục đích sử dụng của bạn để thu về
kết quả cần tìm.
Tham số truyền vào lệnh (COMMAND PARAMETERS)
Nhiều lúc mà code như trên ấy, mình muốn thay đổi mệnh lệnh chẳng lẽ cứ phải thay đổi cái
CommandText….Nếu như thế là code không linh đông, mình muốn thay đổi và thực thi câu lệnh bất cứ
khi nào muốn thì lám sao. May thay .NET Framework có hỗ trợ tham số truyên vào lệnh trong biểu thức
SQL và ta có thể thay đổi thông tin cần thiết trong CommandText.
Nếu thủ công lao động chân tay thì có thể theo kiểu này :
[code]
String fname = “Pete”;
String lname = “Houston”;
String value = “(„” + fname + “‟,” + “‟” + lname + “‟)”;
String queryInsert = @” INSERT INTO Employees (firstname, lastname) VALUES ” + value;
[/code]
Nhưng mà kiểu này thì khác gì làm như trên, nhìn code lại hoa cả mắt.
Cách tốt nhất là làm việc với tham số truyền trong SQL. Trong câu lệnh SQL thì tham số được kí hiệu với
dấu @ ở trước.. Ví dụ với câu lệnh INSERT :
[code]
INSERT INTO MyTable VALUES (@MyName, @MyNumber)
[/code]
OK ! Thử làm xem nó ra sao. Dưới đây là code minh họa
[code]
using System;
using System.Data;
using System.Data.SqlClient;
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 10 of 11
public class ThiHanhMenhLenh
{
public static void Main()
{
SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
Integrated Security = True;
Database = Northwind");
string fname = "Pete";
string lname = "Houston";
string querySelect = @"SELECT firstname, lastname FROM Employees
WHERE EmployeeID > 9";
string queryInsert = @"INSERT INTO Employees (firstname,lastname)
VALUES (@fname,@lname)";
SqlCommand cmdSelect = new SqlCommand(querySelect, conn);
SqlCommand cmdInsert = new SqlCommand(queryInsert, conn);
cmdInsert.Parameters.Add("@fname", SqlDbType.NVarChar, 10);
cmdInsert.Parameters.Add("@lname", SqlDbType.NVarChar, 20);
try
{
conn.Open();
Console.WriteLine("Open connection !");
cmdInsert.Parameters["@fname"].Value = fname;
cmdInsert.Parameters["@lname"].Value = lname;
cmdInsert.ExecuteNonQuery();
SqlDataReader reader = cmdSelect.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(" New Employee : {0} {1} ",
reader.GetValue(0), reader.GetValue(1));
}
reader.Close();
}
catch (SqlException sqle)
{
Console.WriteLine(sqle.ToString());
}
finally
{
conn.Close();
Console.WriteLine("Close connection !");
}
}
}
[/code]
Đầu tiên ta khai báo tham số truyền vào trong chuôi lệnh thực thi SQL :
[code]
cmdInsert.Parameters.Add("@fname", SqlDbType.NVarChar, 10);
cmdInsert.Parameters.Add("@lname", SqlDbType.NVarChar, 20);
Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007
Page 11 of 11
[/code]
Sau đó thì truyền vào giá trị cần thực hiện của tham số :
[code]
cmdInsert.Parameters["@fname"].Value = fname;
cmdInsert.Parameters["@lname"].Value = lname;
[/code]
Chú ý là mỗi lần thực hiện xong một lệnh thì bạn phải truyền lại CommandText nếu không lệnh sẽ không
có hiệu lực. Nhưng như thế thì rất là bất tiện vì thế một phương thức được tạo ra để chúng ta thi hành một
lệnh nhiều lần : CommandObject.Prepare().
Nhưng nếu mà thay đổi CommandText thì phương thức prepare() sẽ lập tức mất ngay hiệu lực.
Kết thúc bài về „Thực thi mệnh lệnh với cơ sở dữ liệu‟.
Bài tiếp theo : „Đọc dữ liệu với Data Readers‟.
Các bạn xem index mục lục để xem chi tiết các bài viết.

More Related Content

What's hot

Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaBrand Xanh
 
04 chuong 4 - databinding
04   chuong 4 - databinding04   chuong 4 - databinding
04 chuong 4 - databindingtruong le hung
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpngohanty13
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaANHMATTROI
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state managementhoangnguyentien
 
Ajax report
Ajax reportAjax report
Ajax reportdvcuong
 
Lập trình web – cgi
Lập trình web – cgiLập trình web – cgi
Lập trình web – cgiSon Nguyen
 
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956Ham Chơi
 
Bảo mật dữ liệu
Bảo mật dữ liệuBảo mật dữ liệu
Bảo mật dữ liệuSon Nguyen
 
6.adapterset
6.adapterset6.adapterset
6.adaptersetDao Uit
 
5.cach su dung data reader
5.cach su dung data reader5.cach su dung data reader
5.cach su dung data readerDao Uit
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Đặng Til
 
Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Ham Chơi
 
Bai4 basic jsp_4474
Bai4 basic jsp_4474Bai4 basic jsp_4474
Bai4 basic jsp_4474Ham Chơi
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Hiển Phùng
 

What's hot (20)

Asp control
Asp controlAsp control
Asp control
 
Các bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với javaCác bước kết nối csdl my sql với java
Các bước kết nối csdl my sql với java
 
04 chuong 4 - databinding
04   chuong 4 - databinding04   chuong 4 - databinding
04 chuong 4 - databinding
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
Giao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharpGiao trinh asp.ne_tvoi_csharp
Giao trinh asp.ne_tvoi_csharp
 
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi Java
 
Laptrinh jdbc
Laptrinh jdbcLaptrinh jdbc
Laptrinh jdbc
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
 
Ajax report
Ajax reportAjax report
Ajax report
 
Lập trình web – cgi
Lập trình web – cgiLập trình web – cgi
Lập trình web – cgi
 
Data provider
Data providerData provider
Data provider
 
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956
 
Cach su dung data reader
Cach su dung data readerCach su dung data reader
Cach su dung data reader
 
Bảo mật dữ liệu
Bảo mật dữ liệuBảo mật dữ liệu
Bảo mật dữ liệu
 
6.adapterset
6.adapterset6.adapterset
6.adapterset
 
5.cach su dung data reader
5.cach su dung data reader5.cach su dung data reader
5.cach su dung data reader
 
Slide3 - Co ban HTML5
Slide3 - Co ban HTML5Slide3 - Co ban HTML5
Slide3 - Co ban HTML5
 
Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952Bai1 gioi thieu_servlet_va_jsp_8952
Bai1 gioi thieu_servlet_va_jsp_8952
 
Bai4 basic jsp_4474
Bai4 basic jsp_4474Bai4 basic jsp_4474
Bai4 basic jsp_4474
 
Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1Lap trinhcosodulieuvoi c-sharp_phan-1
Lap trinhcosodulieuvoi c-sharp_phan-1
 

Viewers also liked

các bước hack server
các bước hack servercác bước hack server
các bước hack servertruong le hung
 
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Levis Nickaster
 
bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)truong le hung
 
Tấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select unionTấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select unionNguyễn Danh Thanh
 
Báo cáo SQL injecttion
Báo cáo SQL injecttionBáo cáo SQL injecttion
Báo cáo SQL injecttionDuy Nguyenduc
 
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)Luc Cao
 
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web applicationCông cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web applicationducmanhkthd
 
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPTBài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPTMasterCode.vn
 

Viewers also liked (10)

Stored procedure
Stored procedureStored procedure
Stored procedure
 
các bước hack server
các bước hack servercác bước hack server
các bước hack server
 
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
 
bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)
 
Tấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select unionTấn công sql injection sử dụng câu lệnh select union
Tấn công sql injection sử dụng câu lệnh select union
 
Báo cáo SQL injecttion
Báo cáo SQL injecttionBáo cáo SQL injecttion
Báo cáo SQL injecttion
 
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
 
Dr.Repi
Dr.Repi Dr.Repi
Dr.Repi
 
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web applicationCông cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web application
 
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPTBài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
Bài 4: Bảo mật máy chủ, ứng dụng, dữ liệu và mạng - Giáo trình FPT
 

Similar to Thuc thi menh lenh voi co so du lieu

Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...MasterCode.vn
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoMasterCode.vn
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vnNguyen Van Hung
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Trần Thiên Đại
 
Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vnJenny Nguyen
 
Sql injection2
Sql injection2Sql injection2
Sql injection2Gió Lào
 
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...MasterCode.vn
 
7 databinding-120306231825-phpapp02(1)
7 databinding-120306231825-phpapp02(1)7 databinding-120306231825-phpapp02(1)
7 databinding-120306231825-phpapp02(1)TI Anh
 
Essay amazon ec2 api
Essay amazon ec2 apiEssay amazon ec2 api
Essay amazon ec2 apiDuong Nguyen
 

Similar to Thuc thi menh lenh voi co so du lieu (20)

Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
Bài 6: Lập trình với CSDL Kiến trúc kết nối & Buộc dữ liệu - Lập trình winfor...
 
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theoBài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
Bài 5: Làm quen với lập trình CSDL ASP.NET - Giáo trình FPT - Có ví dụ kèm theo
 
access
accessaccess
access
 
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
Asp.net mvc 3 (c#) (9 tutorials)   egroups vnAsp.net mvc 3 (c#) (9 tutorials)   egroups vn
Asp.net mvc 3 (c#) (9 tutorials) egroups vn
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0Những điểm mới trong c# 3.0
Những điểm mới trong c# 3.0
 
3 lop
3 lop3 lop
3 lop
 
Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vn
 
Sql injection2
Sql injection2Sql injection2
Sql injection2
 
ado.net
ado.netado.net
ado.net
 
Giáo trình asp.net với c sharp
Giáo trình asp.net với c sharpGiáo trình asp.net với c sharp
Giáo trình asp.net với c sharp
 
Ung dung web chuong 6
Ung dung web  chuong 6Ung dung web  chuong 6
Ung dung web chuong 6
 
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
Bài 5: ADO.NET & Kiến trúc không kết nối (tiếp) Điều khiển DataGridView,Combo...
 
Dsd05 02a-xml-rpca
Dsd05 02a-xml-rpcaDsd05 02a-xml-rpca
Dsd05 02a-xml-rpca
 
7 databinding-120306231825-phpapp02(1)
7 databinding-120306231825-phpapp02(1)7 databinding-120306231825-phpapp02(1)
7 databinding-120306231825-phpapp02(1)
 
C# co ban 10
C# co ban 10C# co ban 10
C# co ban 10
 
Unit Test
Unit TestUnit Test
Unit Test
 
Essay amazon ec2 api
Essay amazon ec2 apiEssay amazon ec2 api
Essay amazon ec2 api
 
Bài tập javascript
Bài tập javascriptBài tập javascript
Bài tập javascript
 

More from truong le hung

lập trình di động
lập trình di độnglập trình di động
lập trình di độngtruong le hung
 
04 chuong 4 - sap xep, tim kiem, loc du lieu
04   chuong 4 - sap xep, tim kiem, loc du lieu04   chuong 4 - sap xep, tim kiem, loc du lieu
04 chuong 4 - sap xep, tim kiem, loc du lieutruong le hung
 
04 chuong 4 - cap nhat du lieu
04   chuong 4 - cap nhat du lieu04   chuong 4 - cap nhat du lieu
04 chuong 4 - cap nhat du lieutruong le hung
 
04 chuong 4 - cap nhat du lieu
04   chuong 4 - cap nhat du lieu04   chuong 4 - cap nhat du lieu
04 chuong 4 - cap nhat du lieutruong le hung
 
03 chuong 3 - data sets
03   chuong 3 - data sets03   chuong 3 - data sets
03 chuong 3 - data setstruong le hung
 
02 chuong 2 - lay du lieu theo cach connected
02   chuong 2 - lay du lieu theo cach connected02   chuong 2 - lay du lieu theo cach connected
02 chuong 2 - lay du lieu theo cach connectedtruong le hung
 
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
01   chuong 1 - gioi thieu ado.net va ket noi den csdl01   chuong 1 - gioi thieu ado.net va ket noi den csdl
01 chuong 1 - gioi thieu ado.net va ket noi den csdltruong le hung
 

More from truong le hung (8)

lập trình di động
lập trình di độnglập trình di động
lập trình di động
 
Lập trình android
Lập trình androidLập trình android
Lập trình android
 
04 chuong 4 - sap xep, tim kiem, loc du lieu
04   chuong 4 - sap xep, tim kiem, loc du lieu04   chuong 4 - sap xep, tim kiem, loc du lieu
04 chuong 4 - sap xep, tim kiem, loc du lieu
 
04 chuong 4 - cap nhat du lieu
04   chuong 4 - cap nhat du lieu04   chuong 4 - cap nhat du lieu
04 chuong 4 - cap nhat du lieu
 
04 chuong 4 - cap nhat du lieu
04   chuong 4 - cap nhat du lieu04   chuong 4 - cap nhat du lieu
04 chuong 4 - cap nhat du lieu
 
03 chuong 3 - data sets
03   chuong 3 - data sets03   chuong 3 - data sets
03 chuong 3 - data sets
 
02 chuong 2 - lay du lieu theo cach connected
02   chuong 2 - lay du lieu theo cach connected02   chuong 2 - lay du lieu theo cach connected
02 chuong 2 - lay du lieu theo cach connected
 
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
01   chuong 1 - gioi thieu ado.net va ket noi den csdl01   chuong 1 - gioi thieu ado.net va ket noi den csdl
01 chuong 1 - gioi thieu ado.net va ket noi den csdl
 

Recently uploaded

Kiến thức cơ bản về tư duy số - VTC Net Viet
Kiến thức cơ bản về tư duy số - VTC Net VietKiến thức cơ bản về tư duy số - VTC Net Viet
Kiến thức cơ bản về tư duy số - VTC Net VietNguyễn Quang Huy
 
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnTử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnKabala
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...hoangtuansinh1
 
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiTrắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiNgocNguyen591215
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...Nguyen Thanh Tu Collection
 
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vnGiới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vnKabala
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdfltbdieu
 
60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx
60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx
60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docxasdnguyendinhdang
 
bài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docxbài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docxTrnHiYn5
 
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdfGiáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf4pdx29gsr9
 
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdfxemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdfXem Số Mệnh
 
Bài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiệnBài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiệnpmtiendhti14a5hn
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...Nguyen Thanh Tu Collection
 
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfxemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfXem Số Mệnh
 
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...ChuThNgnFEFPLHN
 
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoiC6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoidnghia2002
 

Recently uploaded (20)

Kiến thức cơ bản về tư duy số - VTC Net Viet
Kiến thức cơ bản về tư duy số - VTC Net VietKiến thức cơ bản về tư duy số - VTC Net Viet
Kiến thức cơ bản về tư duy số - VTC Net Viet
 
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnTử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
 
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hộiTrắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
Trắc nghiệm CHƯƠNG 5 môn Chủ nghĩa xã hội
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
 
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vnGiới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
 
60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx
60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx
60 CÂU HỎI ÔN TẬP LÝ LUẬN CHÍNH TRỊ NĂM 2024.docx
 
bài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docxbài thi bảo vệ nền tảng tư tưởng của Đảng.docx
bài thi bảo vệ nền tảng tư tưởng của Đảng.docx
 
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdfGiáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
Giáo trình xây dựng thực đơn. Ths Hoang Ngoc Hien.pdf
 
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdfxemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
 
Bài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiệnBài giảng môn Truyền thông đa phương tiện
Bài giảng môn Truyền thông đa phương tiện
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
 
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfxemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
 
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
SD-05_Xây dựng website bán váy Lolita Alice - Phùng Thị Thúy Hiền PH 2 7 8 6 ...
 
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoiC6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
 

Thuc thi menh lenh voi co so du lieu

  • 1. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 1 of 11 Ở bài viết này mình sẽ hướng dẫn các bạn cách tạo một mệnh lệnh (command) và thực thi trên cơ sở dữ liệu (database). Tạo một mệnh lệnh (CREATING A COMMAND) Có rất nhiều cách ngoài cách sử dụng SqlCommand nhưng mình sẽ dùng cách này để làm ví dụ vì nó được cung cấp tốt nhất trong việc liên kết với cơ sở dữ liệu SQL. Mở Visual C# chọn Console Application và dùng thử code sau để phân tích : [code] using System; using System.Data; using System.Data.SqlClient; class MenhLenh { public static void Main() { // tạo một kết nối SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS; Integrated Security = True; Database = Northwind"); // tạo một đối tượng giữ lệnh cần thực thi SqlCommand cmd = new SqlCommand(); Console.WriteLine("Command created."); try { // mở kết nối conn.Open(); } catch (SqlException e) { Console.WriteLine(e.ToString()); } finally { // đóng kết nối conn.Close(); Console.WriteLine("Connection Closed."); } } } [/code] Bài này chính xác là bài mình đã giới thiệu và dùng làm ví dụ trong bài trước „Tạo một kết nối tới cơ sở dữ liệu‟ cho nên mình không nói thêm gì về phần đóng/mở kết nối tới hệ quản trị cơ sở dữ liệu. Chỉ khác ở chỗ có thêm 2 dòng code tạo thêm mệnh lệnh : [code] // tạo một đối tượng giữ lệnh cần thực thi SqlCommand cmd = new SqlCommand();
  • 2. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 2 of 11 Console.WriteLine("Command created."); [/code] Ở đây thông qua lớp „SqlCommand‟ mình tạo một đối tượng để nắm giữ thông tin về lệnh. Sau khi tạo xong thì thông báo ra Console “Command created.” Chương trình về cơ bản là vậy rất đơn giản dễ hiểu. Đó là cách tạo đối tượng nắm giữ mệnh lệnh. Mệnh lệnh tạo ra chỉ có tác dụng KHI VÀ CHỈ KHI nó được chỉ định thực thi trong kết nối nào. Vì vậy phải cho nó đi kèm với một kết nối tồn tại để tạo và thi hành mệnh lệnh được viết ra. Ví dụ sau mình sẽ minh họa các gán mệnh lệnh vào một kết nối. [code] using System; using System.Data; using System.Data.SqlClient; class MenhLenh { public static void Main() { // tạo một kết nối SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS; Integrated Security = True; Database = Northwind"); // tạo một đối tượng giữ lệnh cần thực thi SqlCommand cmd = new SqlCommand(); Console.WriteLine("Command created."); try { // mở kết nối conn.Open(); // gán mệnh lệnh vào kết nối cmd.Connection = conn; Console.WriteLine("Connected command to connection !"); } catch (SqlException e) { Console.WriteLine(e.ToString()); } finally { // đóng kết nối conn.Close(); Console.WriteLine("Connection Closed."); } } } [/code] Bạn dễ thấy ví dụ này cũng chính là ví dụ ban đầu nhưng mình chỉ có thay đổi thêm một chút trong khối lệnh „try‟
  • 3. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 3 of 11 [code] // gán mệnh lệnh vào kết nối cmd.Connection = conn; Console.WriteLine("Connected command to connection !"); [/code] Sau khi ở trên mình đã tạo ra một kết nối tới cơ sở dữ liệu và một đối tượng nắm giữ mệnh lệnh thi hành thì bên dướ mình thử gán mệnh lệnh với kết nối. Trong đối tượng của mệnh lệnh có một thuộc tính (properties) để gán vào một kết nối nào đó : CommandObject.Connection = ConnectionObject; Như ở trên thì sau khi gán kết nối xong thì Console sẽ thông báo ra kết quả là gán mệnh lệnh vào kết nối thành công. Câu hỏi đặt ra ở đây là : Tại sao không gán kết nối ngay khi tạo ra đối tượng kết nối mà phải cho vào khối „try..catch..finally‟ làm cái gì ? Câu trả lời rất dễ hiểu: Bạn thử nghĩ xem sau khi bạn tạo kết nối thì muốn kích hoạt và kiểm tra kết nối có tốt hay không thì phải ném vào trong khối „try..catch‟. Giả sử mà bạn khai báo gán mệnh lệnh ở ngay trước khối „try..catch‟ và kết nối thành công thì không có lỗi gì cả. Nhưng trong trường hợp nếu có lỗi biến cố bất ngờ xảy ra thì khi gán mệnh lệnh vào kết nối sẽ có lỗi và chương trình sẽ ngưng hoạt động và ở tình trạng treo mà vẫn tiêu thụ tài nguyên máy, rất lãng phí. Vì vậy mà tốt nhất gán trong khối „try..catch‟ sau khi mở kết nối để gặp lỗi thì ta có thể biết được lỗi và nguyên nhân gây lỗi và sửa (debug).Giải thích thế này không biết có hiểu không ^_^! Tuy nhiên nếu bạn chắc chắn là kết nối đảm bảo tốt thì bạn có thể gán mệnh lệnh vào kết nối ngay từ đầu và rút ngắn lại code [code] SqlCommand cmd = conn.CreateCommand(); [/code] Tương đương với 2 dòng code [code] SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; [/code] Bạn đã tạo được đối tượng nắm giữ mệnh lệnh và gán được vào kết nối, bây giờ phải viết mệnh lệnh cho đối tượng.
  • 4. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 4 of 11 Ta dùng thuộc tình „CommandObject.CommandText‟ để tạo một lệnh cần thực thi với cơ sở dữ liệu. Bạn vẫn dùng code ở trên nhưng chỉ thay đổi đi phần code trong khối „try..catch‟ bằng phần code dưới đây nhé : [code] try { // mở kết nối conn.Open(); // gán mệnh lệnh vào kết nối cmd.Connection = conn; Console.WriteLine("Connected command to connection !"); // tạo một lệnh cho đối tượng cmd.CommandText = @" SELECT count(*) FROM Employees "; Console.WriteLine(" Ready to execute SQL command : {0} ", cmd.CommandText); } [/code] Bạn để ý ở đây tớ có thêm 2 dòng code khác bên dưới. „CommandText‟ ở đây là một lệnh SQL, nếu bạn viết cái gì đó khác hơn là một câu lệnh SQL thì sẽ có lỗi thông báo khi thực thi lệnh này, đây là đoạn trick nếu mà bạn không thông thạo về cấu trúc câu lệnh SQL . Xem bài 1 „Cơ bản về SQL cho người mới bắt đầu‟ để biết chút cơ bản ban đầu về SQL nhé. Thực thi mệnh lệnh (EXECUTING COMMAND) Bây giờ thử thực thi câu lệnh nhé xem kết quả thế nào. Nhưng khi thực thi một lệnh thì kết quả sẽ cho ra khác nhau nếu như bạn sử dụng phương thức thực thi (execution method) khác nhau. Có 4 cách thực thi lệnh theo bảng sau : Phương thức (Method) Giá trị trả về (Return Value) ExecuteNonQuey() Không trả về gì vì không phải query ExecuteScalar() Một giá trị duy nhất ExecuteReader() Không hoặc nhiều hàng ExecuteXmlReader XML À bạn có thể hiểu query là một biểu thức có giá trị trả về. Bây giờ vẫn bài ở trên tớ dùng „ExecuteScalar‟ để thu giá trị lấy về [code] using System; using System.Data; using System.Data.SqlClient;
  • 5. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 5 of 11 class MenhLenh { public static void Main() { // tạo một kết nối SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS; Integrated Security = True; Database = Northwind"); // tạo một đối tượng giữ lệnh cần thực thi SqlCommand cmd = new SqlCommand(); Console.WriteLine("Command created."); try { // mở kết nối conn.Open(); // gán mệnh lệnh vào kết nối cmd.Connection = conn; Console.WriteLine("Connected command to connection !"); // tạo một lệnh cho đối tượng cmd.CommandText = @"SELECT count(*) FROM Employees "; Console.WriteLine("Ready to execute SQL command : {0} ", cmd.CommandText); // Thực thi câu lệnh Console.WriteLine("Number of Employees is {0} ", cmd.ExecuteScalar()); } catch (SqlException e) { Console.WriteLine(e.ToString()); } finally { // đóng kết nối conn.Close(); Console.WriteLine("Connection Closed."); } } } [/code] Ở đây bạn sẽ thu kết quả là : „Number of Employees is 9‟. Bạn học thêm một câu lệnh SQL mới luôn nhé. Để đếm số dòng (rows) trong một bảng ta dùng tham số „count(*)‟ Cách gọi : [code] SELECT count(*) FROM <table_name>
  • 6. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 6 of 11 [/code] Giá trị trả về là kiểu „Object‟ và có một kết quả nên sử dụng „ExecuteScalar‟. Bạn nên chú ý ở đây : „ExecuteScalar‟ trả về kiểu „Object‟ và trong môi trường .NET Framework thì cơ sở dữ liệu có thể chứa bất cứ kiểu dữ liệu nào. Khi đưa ra Console dùng „WriteLine‟ thì tất cả các kiểu đều bị convert sang kiểu kí tự in ra màn hình hết. Bạn có thể chuyển giá trị thu được về một kiểu nào đó nhưng nếu convert không hợp lệ thì sẽ có „Runtime Error : Invaliad type cast‟ hay gì đó đại loại như thế. Mình giả sử bài ở trên mình muốn giá trị thu về kiểu „Int‟ thì mình code như sau : [code] int count = (int)cmd.ExecuteScalar(); Console.WriteLine(“ Number of Employees is {0} “, count); [/code] Nếu như mình vẫn dùng thêm cái code convert ở ngay trên đây và thay đổi đi câu lệnh thực thi (commandText) thành : [code] cmd.CommandText = “SELECT firstname FROM employees WHERE lastname = „Davolio‟ [/code] Thì với ExecuteScalar() sẽ trả về kiểu Object có giá trị là “Nancy” thực chất là kiểu String (C#) nhưng mà ở trên bạn lại cast nó sang kiểu „Int‟ và màn hình sẽ thông báo lỗi như sau Unhandled Exception : System.InvalidCastException: Specified cast is not valid. Kiểu „String‟ không thể bị convert sang kiểu „Int‟. Bây giờ chúng ta cùng thực hiện câu lệnh thu về nhiều kết quả xem. Tất nhiên là sử dụng : ExecuteReader() [code] using System; using System.Data; using System.Data.SqlClient; class MenhLenh { public static void Main() { // tạo một kết nối SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS;
  • 7. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 7 of 11 Integrated Security = True; Database = Northwind"); // tạo một đối tượng giữ lệnh cần thực thi SqlCommand cmd = new SqlCommand(); Console.WriteLine("Command created."); try { // mở kết nối conn.Open(); // gán mệnh lệnh vào kết nối cmd.Connection = conn; Console.WriteLine("Connected command to connection !"); // tạo một lệnh cho đối tượng cmd.CommandText = @"SELECT firstname, lastname FROM Employees "; Console.WriteLine("Ready to execute SQL command : {0} ", cmd.CommandText); // Thực thi câu lệnh SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine(" Employee name : {0} {1} ", reader.GetValue(0), reader.GetValue(1)); } reader.Close(); } catch (SqlException e) { Console.WriteLine(e.ToString()); } finally { // đóng kết nối conn.Close(); Console.WriteLine("Connection Closed."); } } } [/code] Ở đây ta dùng query đẻ lấy về họ tên trong bảng Employees. Và phương thức : ExecuteReader() trả về giá trị là một đối tượng SqlDataReader. Vì thế ở đây tớ tạo ra một đối tượng SqlDataReader là reader để thu nhận tất cả kết quả lấy dược từ database. Kết quả sẽ theo từng dòng (row) và mỗi lần đọc „reader.Read()‟ thì nó chứa giá trị có được từ bảng theo dòng và chi nắm giữ thông tin lấy chứ không phải tất cả các cột có trong bảng. Ví dụ ở đây tớ chỉ lấy 2 cột họ và tên thì mỗi hàng trong reader khi Read() thì chỉ có 2 value tương ứng với Value(1) là họ và Value(0) là tên. Nếu như ở đây mà bạn GetValue(i) với i khác 0 và 1 thì chương trình sẽ treo . Phương thức Read() sau mỗi lần thực hiện thì nó sẽ trả về hàng tiếp theo. Do dó để đọc hết kết quả thu được ở đây tớ dùng vòng lặp „while‟ đọc cho đến khi không còn hàng nào nữa thì thôi.
  • 8. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 8 of 11 Để thực thi một biểu thức thì ta sử dụng : ExecuteNonQuery(). Đơn giản vì biểu thức chẳng trả về giá trị gì cả. Ví dụ bên dưới minh họa cách dùng : [code] using System; using System.Data; using System.Data.SqlClient; public class ThiHanhMenhLenh { public static void Main() { SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS; Integrated Security = True; Database = Northwind"); string querySelect = @"SELECT count(*) FROM Employees"; string queryInsert = @"INSERT INTO Employees (firstname,lastname) VALUES ('Pete','Houston')"; string queryDelete = @"DELETE FROM Employees WHERE firstname = 'Pete' AND lastname = 'Houston'"; SqlCommand cmdSelect = new SqlCommand(querySelect, conn); SqlCommand cmdInsert = new SqlCommand(queryInsert, conn); SqlCommand cmdDelete = new SqlCommand(queryDelete, conn); try { conn.Open(); Console.WriteLine("Open connection !"); Console.WriteLine("Before INSERT : "); Console.WriteLine(" Number of employees : {0} ", cmdSelect.ExecuteScalar()); cmdInsert.ExecuteNonQuery(); Console.WriteLine("Insert complete !"); Console.WriteLine("After INSERT : "); Console.WriteLine(" Number of employees : {0} ", cmdSelect.ExecuteScalar()); cmdDelete.ExecuteNonQuery(); Console.WriteLine("Delete complete !"); Console.WriteLine("After DELETE : "); Console.WriteLine(" Number of employees : {0} ", cmdSelect.ExecuteScalar()); } catch (SqlException sqle) { Console.WriteLine(sqle.ToString()); } finally { conn.Close(); Console.WriteLine("Close connection !");
  • 9. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 9 of 11 } } } [/code] Như bạn thấy ở đây mình tạo ra hai đối tượng cmdInsert và cmdDelete dùng để thực thi hai biểu thức thi hành xóa và chèn thêm giá trị vào bảng, vì thế mà nó không có giá trị trả về và dùng ExecuteNonQuery. Việc thực thi mệnh lệnh không có gì khó khăn cả và phụ thuộc vào mục đích sử dụng của bạn để thu về kết quả cần tìm. Tham số truyền vào lệnh (COMMAND PARAMETERS) Nhiều lúc mà code như trên ấy, mình muốn thay đổi mệnh lệnh chẳng lẽ cứ phải thay đổi cái CommandText….Nếu như thế là code không linh đông, mình muốn thay đổi và thực thi câu lệnh bất cứ khi nào muốn thì lám sao. May thay .NET Framework có hỗ trợ tham số truyên vào lệnh trong biểu thức SQL và ta có thể thay đổi thông tin cần thiết trong CommandText. Nếu thủ công lao động chân tay thì có thể theo kiểu này : [code] String fname = “Pete”; String lname = “Houston”; String value = “(„” + fname + “‟,” + “‟” + lname + “‟)”; String queryInsert = @” INSERT INTO Employees (firstname, lastname) VALUES ” + value; [/code] Nhưng mà kiểu này thì khác gì làm như trên, nhìn code lại hoa cả mắt. Cách tốt nhất là làm việc với tham số truyền trong SQL. Trong câu lệnh SQL thì tham số được kí hiệu với dấu @ ở trước.. Ví dụ với câu lệnh INSERT : [code] INSERT INTO MyTable VALUES (@MyName, @MyNumber) [/code] OK ! Thử làm xem nó ra sao. Dưới đây là code minh họa [code] using System; using System.Data; using System.Data.SqlClient;
  • 10. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 10 of 11 public class ThiHanhMenhLenh { public static void Main() { SqlConnection conn = new SqlConnection(@"Server = .SQLEXPRESS; Integrated Security = True; Database = Northwind"); string fname = "Pete"; string lname = "Houston"; string querySelect = @"SELECT firstname, lastname FROM Employees WHERE EmployeeID > 9"; string queryInsert = @"INSERT INTO Employees (firstname,lastname) VALUES (@fname,@lname)"; SqlCommand cmdSelect = new SqlCommand(querySelect, conn); SqlCommand cmdInsert = new SqlCommand(queryInsert, conn); cmdInsert.Parameters.Add("@fname", SqlDbType.NVarChar, 10); cmdInsert.Parameters.Add("@lname", SqlDbType.NVarChar, 20); try { conn.Open(); Console.WriteLine("Open connection !"); cmdInsert.Parameters["@fname"].Value = fname; cmdInsert.Parameters["@lname"].Value = lname; cmdInsert.ExecuteNonQuery(); SqlDataReader reader = cmdSelect.ExecuteReader(); while (reader.Read()) { Console.WriteLine(" New Employee : {0} {1} ", reader.GetValue(0), reader.GetValue(1)); } reader.Close(); } catch (SqlException sqle) { Console.WriteLine(sqle.ToString()); } finally { conn.Close(); Console.WriteLine("Close connection !"); } } } [/code] Đầu tiên ta khai báo tham số truyền vào trong chuôi lệnh thực thi SQL : [code] cmdInsert.Parameters.Add("@fname", SqlDbType.NVarChar, 10); cmdInsert.Parameters.Add("@lname", SqlDbType.NVarChar, 20);
  • 11. Thực thi mệnh lệnh với cơ sở dữ liệu Author : Xcross87 2007 Page 11 of 11 [/code] Sau đó thì truyền vào giá trị cần thực hiện của tham số : [code] cmdInsert.Parameters["@fname"].Value = fname; cmdInsert.Parameters["@lname"].Value = lname; [/code] Chú ý là mỗi lần thực hiện xong một lệnh thì bạn phải truyền lại CommandText nếu không lệnh sẽ không có hiệu lực. Nhưng như thế thì rất là bất tiện vì thế một phương thức được tạo ra để chúng ta thi hành một lệnh nhiều lần : CommandObject.Prepare(). Nhưng nếu mà thay đổi CommandText thì phương thức prepare() sẽ lập tức mất ngay hiệu lực. Kết thúc bài về „Thực thi mệnh lệnh với cơ sở dữ liệu‟. Bài tiếp theo : „Đọc dữ liệu với Data Readers‟. Các bạn xem index mục lục để xem chi tiết các bài viết.