Lập trình trên nền Web - 27

<configuration>

<connectionStrings>

<add name="Northwind" connectionString="Data Source= (local)SQLEXPRESS; Initial Catalog=Northwind;Integrated Security=SSPI"/>

</connectionStrings>

</configuration>

Lấy nội dung ConnectionString trong thẻ <connectionStrings> trong tập tin Web.config phải khai báo thêm : using System.Web.Configuration;

private string connectionString= WebConfigurationManager.ConnectionStrings["Pubs"]. ConnectionString;

4.5.2. Lớp Command

Sau khi kết nối với cơ sở dữ liệu, sau đó submit các truy vấn SQL đến cơ sở dữ liệu. Kiểu SqlCommand (kế thừa từ DbCommand). Kiểu của Command theo lý thuyết sử dụng thuộc tính CommandType, có thể lấy ra bất cứ giá trị nào từ CommandType enum:

public enum CommandType

{

StoredProcedure, TableDirect,

Text // Default value.

}

Khi tạo một đối tượng Command cũng có thể kết hợp truy vấn SQL như một Constructor có tham số hoặc trực tiếp thông qua thuộc tính CommandText. Ngoài ra khi đang tạo một đối tượng command, cần chỉ rò kết nối được sử dụng. Mặt khác, có thể tạo một Constructor có đối số hoặc thông qua thuộc tính Connection. Ví dụ

SqlConnection cn = new SqlConnection(); string strSQL = "Select * From Customers";

SqlCommand myCommand = new SqlCommand(strSQL, cn); SqlCommand testCommand = new SqlCommand(); testCommand.Connection = cn; testCommand.CommandText = strSQL;

Các thành phần của DbCommand


Thành phần

Ý nghĩa

CommandTimeout

Lấy ra hoặc thiết lập thời gian chờ trong khi đang thực thi lệnh

trước khi kết thúc.

Connection

Lấy ra hoặc thiết lập DbConnection được dùng bởi thể hiện này

của DbCommand.

Có thể bạn quan tâm!

Xem toàn bộ 285 trang tài liệu này.


Parameters

Lấy ra tập hợp các kiểu của DbParameter được dùng cho một

truy vấn có tham số.

Cancel()

Hủy bỏ việc thực thi của một lệnh.

ExecuteReader()

Thực hiện câu lệnh trong CommandText. Kết quả trả về là

SqlDataReader của trình cung cấp dữ liệu.

ExecuteNonQuery()

Thực hiện câu lệnh trong CommandText và không có kết quả

trả về.

ExecuteScalar()

Thực hiện câu lệnh trong CommandText, kết quả trả về là một

giá trị đơn.

ExecuteXmlReader()

Phương thức này trả ra một System.Xml.XmlReader mà cho

phép xử lý luồng đầu vào của XML

Prepare()

Tạo một phiên bản được chuẩn bị (hoặc được biên dịch) của

lệnh trên nguồn dữ liệu.

Ví dụ: Tính tổng số bản ghi của bảng Orders trong cơ sở dữ liệu nwind.mdb

SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand();

cnn.ConnectionString = “Server=localhost; database=Northwind; user id=sa; password=sa”;

cmd.Connection = cnn;

cmd.CommandText = “SELECT COUNT(*) FROM Orders”; cmd.CommandType = CommandType.Text;

cnn.Open();

int count = (int)cmd.ExecuteScalar(); cnn.Close();

Ví dụ: Thêm một bản ghi vào bảng dtb trong cơ sở dữ liệu QLHS

SqlConnection cnn = new SqlConnection(); SqlCommand cmd = new SqlCommand();

cnn.ConnectionString = “Server=localhost; database=QLHS; user id=sa; password=sa”;

cmd.Connection = cnn;

cmd.CommandText =“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” + “VALUES(5, „Nguyễn Văn A‟, 8.5)”;

cmd.CommandType = CommandType.Text; cnn.Open();

cmd.ExecuteNonQuery(); cnn.Close();

Đối tượng Command và các truy vấn có tham số.

Các truy vấn có tham số thực thi nhanh hơn một chuỗi SQL bình thường, vì chúng được phân tách một cách rò ràng (chuỗi SQL được gắn đến thuộc tính CommandText).

Để hỗ trợ các truy vấn có tham số đối tượng Command của ADO.NET duy trì một tập hợp của các đối tượng tham số riêng biệt. Mặc định, tập hợp này empty, nhưng dễ dàng để thêm bất cứ giá trị nào của đối tượng tham số mà ánh xạ đến một “tham số thay thế” trong truy vấn SQL. Khi muốn kết hợp một tham số bên trong một truy vấn SQL đến một thành viên trong tập hợp các tham số của đối tượng command, thêm tiền tố @ trước tham số SQL.

Để xây dựng một truy vấn có tham số, chúng ra bắt đầu với DbParameter (là lớp cở sở cho đối tượng tham số cụ thể của một trình cung cấp). Lớp này chứa một số thuộc tính mà cho phép cấu hình tên, kích cỡ và kiểu dữ liệu của tham số, cũng như các đặc điểm khác như là hướng của tham số.

Các thành phần chính của DbParameter


Thuộc tính

Ý nghĩa

DbType

Lấy ra hoặc thiết lập kiểu dữ liệu tự nhiên từ nguồn dữ liệu,

được trình bày như kiểu dữ liệu CLR.

Direction

Lấy ra hoặc thiết lập tham số chỉ nhập, chỉ xuất, cả hai, hoặc trả

ra tham số giá trị.

IsNullable

Lấy ra hoặc thiết lập tham số chấp nhận các gía trị Null.

ParameterName

Lấy ra hoặc thiết lập tên của DbParameter.

Size

Lấy ra hoặc thiết lập kích cỡ tham số tối thiểu của dữ liệu (chỉ

hữu ích cho dữ liệu là văn bản).

Value

Lấy ra hoặc thiết lập giá trị cho tham số.

Minh họa tập hợp của các đối tượng Command của các đối tượng DBParameter quan sát đoạn code sau :

string insertSQL;

insertSQL = "INSERT INTO Authors ("; insertSQL += "au_id, au_fname, au_lname, ";

insertSQL += "phone, address, city, state, zip, contract) "; insertSQL += "VALUES (";

insertSQL += "@au_id, @au_fname, @au_lname, ";

insertSQL += "@phone, @address, @city, @state, @zip, @contract)"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(insertSQL, con);

Đưa các Parameters với các giá trị lấy từ các điều khiển nhập vào trong đối tượng Command hiện tại cmd

cmd.Parameters.AddWithValue("@au_id", txtID.Text); cmd.Parameters.AddWithValue("@au_fname", txtFirstName.Text); cmd.Parameters.AddWithValue("@au_Lname", txtLastName.Text); cmd.Parameters.AddWithValue("@phone", txtPhone.Text); cmd.Parameters.AddWithValue("@address", txtAddress.Text); cmd.Parameters.AddWithValue("@city", txtCity.Text); cmd.Parameters.AddWithValue("@state", txtState.Text); cmd.Parameters.AddWithValue("@zip", txtZip.Text); cmd.Parameters.AddWithValue("@contract", Convert.ToInt16(chkContract.Checked));

Hoặc khởi tạo đối tượng SqlParameter và đặt vào trong phần danh sách tham số của đối tượng

cmd.Parameters.Add(new SqlParameter("@au_id", txtID.Text)); cmd.Parameters.Add(new SqlParameter("@au_fname", txtFirstName.Text)); cmd.Parameters.Add(new SqlParameter("@au_Lname", txtLastName.Text)); cmd.Parameters.Add(new SqlParameter("@phone", txtPhone.Text)); cmd.Parameters.Add(new SqlParameter("@address", txtAddress.Text)); cmd.Parameters.Add(new SqlParameter("@city", txtCity.Text)); cmd.Parameters.Add(new SqlParameter("@state", txtState.Text)); cmd.Parameters.Add(new SqlParameter("@zip", txtZip.Text)); cmd.Parameters.Add(new SqlParameter("@contract",Convert.ToInt16(chkContract.Checked)));

Ví dụ: Tạo trang AuthorManager.aspx thiết vế với giao diện sau :

Hình 4 7 Giao diện trang AuthorManager aspx Trang AuthorManager aspx cs public partial class 1

Hình 4.7. Giao diện trang AuthorManager.aspx

Trang AuthorManager.aspx.cs

public partial class AuthorManager : System.Web.UI.Page

{

private string connectionString = WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)

{

if (!this.IsPostBack)

{

FillAuthorList();

}

}

private void FillAuthorList()

{

lstAuthor.Items.Clear();

string selectSQL = "SELECT au_lname, au_fname, au_id FROM Authors"; SqlConnection con = new SqlConnection(connectionString);

SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader reader;

try

{

con.Open();

while (reader.Read())

{

ListItem newItem = new ListItem();

newItem.Text = reader["au_lname"] + ", " + reader["au_fname"]; newItem.Value = reader["au_id"].ToString(); lstAuthor.Items.Add(newItem);

}

reader.Close();

}

catch (Exception err)

{

lblResults.Text = "Error reading list of names. "; lblResults.Text += err.Message;

}

finally

{

con.Close();

}

}

protected void lstAuthor_SelectedIndexChanged(object sender, EventArgs e)

{


try

{


}

string selectSQL;

selectSQL = "SELECT * FROM Authors ";

selectSQL += "WHERE au_id='" + lstAuthor.SelectedItem.Value + "'"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(selectSQL, con); SqlDataReader reader;


con.Open();

reader = cmd.ExecuteReader(); reader.Read();

txtID.Text = reader["au_id"].ToString(); txtFirstName.Text = reader["au_fname"].ToString(); txtLastName.Text = reader["au_lname"].ToString(); txtPhone.Text = reader["phone"].ToString(); txtAddress.Text = reader["address"].ToString(); txtCity.Text = reader["city"].ToString(); txtState.Text = reader["state"].ToString(); txtZip.Text = reader["zip"].ToString(); chkContract.Checked = (bool)reader["contract"]; reader.Close();

lblResults.Text = "";

catch (Exception err)

{

lblResults.Text = "Error getting author. "; lblResults.Text += err.Message;

}

finally

{

con.Close();

}

}

protected void cmdNew_Click(object sender, EventArgs e)

{

txtID.Text = ""; txtFirstName.Text = ""; txtLastName.Text = ""; txtPhone.Text = ""; txtAddress.Text = ""; txtCity.Text = ""; txtState.Text = ""; txtZip.Text = "";

chkContract.Checked = false;

lblResults.Text = "Click Insert New to add the completed record.";

}

protected void cmdInsert_Click(object sender, EventArgs e)

{

if (txtID.Text == "" || txtFirstName.Text == "" || txtLastName.Text == "")

{

lblResults.Text = "Records require an ID, first name, and last name."; return;

}

string insertSQL;

insertSQL = "INSERT INTO Authors ("; insertSQL += "au_id, au_fname, au_lname, ";

insertSQL += "phone, address, city, state, zip, contract) "; insertSQL += "VALUES (";

insertSQL += "@au_id, @au_fname, @au_lname, ";

insertSQL += "@phone, @address, @city, @state, @zip, @contract)"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(insertSQL, con); cmd.Parameters.Add(new SqlParameter("@au_id", txtID.Text));

cmd.Parameters.Add(new SqlParameter("@au_fname", txtFirstName.Text)); cmd.Parameters.Add(new SqlParameter("@au_Lname", txtLastName.Text)); cmd.Parameters.Add(new SqlParameter("@phone", txtPhone.Text)); cmd.Parameters.Add(new SqlParameter("@address", txtAddress.Text)); cmd.Parameters.Add(new SqlParameter("@city", txtCity.Text)); cmd.Parameters.Add(new SqlParameter("@state", txtState.Text)); cmd.Parameters.Add(new SqlParameter("@zip", txtZip.Text));

cmd.Parameters.Add(new SqlParameter("@contract", Convert.ToInt16(chkContract.Checked)));

int added = 0;

try

{


}


con.Open();

added = cmd.ExecuteNonQuery();

lblResults.Text = added.ToString() + " record inserted.";

catch (Exception err)

{

lblResults.Text = "Error inserting record. "; lblResults.Text += err.Message;

}

finally

{

con.Close();

}

if (added > 0)

{

FillAuthorList();

}

}

protected void cmdUpdate_Click(object sender, EventArgs e)

{

string updateSQL;

updateSQL = "UPDATE Authors SET ";

updateSQL += "au_fname=@au_fname, au_lname=@au_lname, ";

updateSQL += "phone=@phone, address=@address, city=@city, state=@state, "; updateSQL += "zip=@zip, contract=@contract ";

updateSQL += "WHERE au_id=@au_id_original"; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(updateSQL, con); cmd.Parameters.AddWithValue("@au_fname", txtFirstName.Text); cmd.Parameters.AddWithValue("@au_Lname", txtLastName.Text); cmd.Parameters.AddWithValue("@phone", txtPhone.Text); cmd.Parameters.AddWithValue("@address", txtAddress.Text); cmd.Parameters.AddWithValue("@city", txtCity.Text);

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022