<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
Ý 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!
- Lập trình trên nền Web - 24
- Vị Trí Của Ado.net Trong Kiến Trúc Của .net Framework
- Kết Nối Đến Cơ Sở Dữ Liệu Và Đọc Dữ Liệu
- Lập trình trên nền Web - 28
- Lập trình trên nền Web - 29
- Kết Quả Hiển Thị Trên Gridview
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
Ý 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 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);