Đoạn code ở trên viết có vẻ như không rỏ ràng. Nếu thực thi một sqlcommand và có truyền tham số thì dạng commandtype chỉ là storedprocedure.
Với dạng CommandType là Text thì ko thể truyền tham số được, vì có truyền tham số thì đó cũng chỉ là một chuổi query thôi. Nên cách giải thích của darkan thì đúng nhưng ví dụ thì ko đúng.
Mấy phương thức trên có thể rút ngắn lại để có thể chỉ sử dụng cho dạng storedprocedure.
Còn vòng for trong các phương thức là để truyền tham số cho procedure. String pars là mãng các tham số của storedprocedure. value là giá trị sẽ truyền cho các tham số đó.
Ví dụ:
cho 1 storedprocedule dùng để thêm một mẫu tin trong CSDL: Person(FirstName, LastName, Age)
PHP Code:
Create proc sp_InsertPerson
@firstname nvarchar(50),
@lastname nvarchar(50),
@age int
as
insert into Person
values(@firstname, @lastname, @age)
Viết lại một phương thức thêm dữ liệu:
{
//ví dụ đã có 1 đối tượng connection là myCon
myCon.Open();
SqlCommand cmdInsertPerson
= new SqlCommand
(); cmdInsertPerson.CommandText = spname;
cmdInsertPerson.CommandType = CommandType.StoredProcedure;
cmdInsertPerson.Connection = myCon; //myCon là sqlconnection đã khai báo và đã mở kết nối
//truyền tất cả các tham số cho stored procedure
for (int i
= 0; i
< pars
.Length; i
++) {
//cấu trúc truyền tham số cho stored procedure như sau:
//cmdInsertPerson.Parameters.AddWithValue("@ParametersName","@ParametersValue");
cmdInsertPerson
.Parameters.AddWithValue(pars
[i
].ToString(),
value[i
].ToString()); }
cmdInsertPerson.EndExecuteNonQuery();
//đóng kết nối
myCon.Close();
}
Cách sử dụng như thế nào? Sau đây là ví dụ:
{
SqlConnection connection
= new SqlConnection
(); connection.ConnectionString = "chuổi kết nối ở đây";
connection.Open();
ExecuteNonQuery
("sp_InsertPerson",
new string[] { "@firstname",
"@lastname",
"@age" },
new string[] { "Sun",
"Sunflower",
"23" }, connection
); connection.Close();
}