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
畛 bi vi畉t ny 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 ngoi c叩ch s畛 d畛ng SqlCommand nh動ng m狸nh s畉 d湛ng c叩ch ny 畛 lm 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]
Bi ny ch鱈nh x叩c l bi m狸nh 達 gi畛i thi畛u v d湛ng lm v鱈 d畛 trong bi 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 no. 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
hnh 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 vo 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 vo 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畛 ny 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 vo 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 hnh
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 vo m畛t k畉t n畛i no 坦 :
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 vo k畉t n畛i
thnh 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 vo kh畛i
try..catch..finally lm 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 vo 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 thnh 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 vo 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畛 ti 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畉 ny 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 vo 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 vo 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 vo 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 ny, 但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 bi 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畉 no. 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 hng
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 bi 畛 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 vo 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 no. 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 mn h狸nh h畉t.
B畉n c坦 th畛 chuy畛n gi叩 tr畛 thu 動畛c v畛 m畛t ki畛u no 坦 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畛 bi 畛 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) thnh :
[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 mn 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 vo 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 hng 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畛 hng 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 hng no 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
hnh x坦a v ch竪n th棚m gi叩 tr畛 vo 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坦 khn c畉 v ph畛 thu畛c vo m畛c 鱈ch s畛 d畛ng c畛a b畉n 畛 thu v畛
k畉t qu畉 c畉n t狸m.
Tham s畛 truy畛n vo 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 no mu畛n th狸 l叩m sao. May thay .NET Framework c坦 h畛 tr畛 tham s畛 truy棚n vo 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 ny :
[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 ny th狸 kh叩c g狸 lm nh動 tr棚n, nh狸n code l畉i hoa c畉 m畉t.
C叩ch t畛t nh畉t l lm 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畛 lm 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 vo 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 vo 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 hnh 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 bi v畛 Th畛c thi m畛nh l畛nh v畛i c董 s畛 d畛 li畛u.
Bi 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 bi vi畉t.