1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình thực hành với C++

8 906 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 171,07 KB

Nội dung

Tài liệu tự học C++, thực hành C++

Trang 1

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 1

CH ƯƠ NG 5 – ADO.NET

T ừ ứ ng d ụ ng, ta có th ể k ế t n ố i và thao tác v ớ i c ơ s ở d ữ li ệ u b ằ ng 2 ph ươ ng pháp sau:

1 K ế t n ố i th ườ ng xuyên

2 K ế t n ố i không th ườ ng xuyên

Phn 1 K ế t ni th ườ ng xuyên

1 Các bước thực hiện

B ướ c 1: Sử d ụ ng Connection để k ế t n ố i đế n c ơ s ở d ữ li ệ u

B ướ c 2: Thiế t l ậ p câu l ệ nh th ự c thi: Insert, Select, Update, Delete

B ướ c 3: Thự c hi ệ n l ệ nh

• M ở k ế t n ố i

• Th ự c thi câu l ệ nh, x ử lý d ữ li ệ u tr ả v ề

• Đ óng k ế t n ố i

2 Ví dụ mẫu

Thi ế t k ế giao di ệ n g ồ m các ph ầ n nh ư hình sau:

- Khi Load form các d ữ li ệ u t ừ b ả ng Customers trong CSDL Northwind c ủ a SQL Server

2000 s ẽ đượ c hi ể n th ị trên ListView và DataGridView

- Khi ch ọ n 1 dòng trên ListView ho ặ c DataGridView, d ữ li ệ u c ủ a dòng t ươ ng ứ ng s ẽ hi ể n th ị

trên các TextBox

- Khi click vào nút Insert, d ữ li ệ u trong các Textbox đượ c thêm vào c ơ s ở d ữ li ệ u

- Khi click vào nút Update, record đượ c ch ọ n s ẽ đượ c ch ỉ nh s ử a và c ậ p nh ậ t vào CSDL

- Khi click nút Delete, record đượ c ch ọ n s ẽ b ị xóa kh ỏ i CSDL

Trang 2

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 2

Ví d 1: đọ c d ữ li ệ u t ừ b ả ng Customers trong CSDL Northwind c ủ a SQL Server 2000 và

hi ể n th ị lên ListView và DataGridView

// 1 Thiết lập kết nối

string strConn = "server=.; Database = Northwind; uid=sa; pwd=;";

SqlConnection cnNorth = new SqlConnection(strConn);

// 2 Thiết lập câu lệnh

string sqlSelect = "select CustomerID, CompanyName, Address, City from

Customers";

SqlCommand cmdNorth = new SqlCommand(sqlSelect, cnNorth);

cmdNorth.Connection.Open();

// 3 Thực hiện lệnh

SqlDataReader reader = cmdNorth.ExecuteReader();

// Lấy dữ liệu để hiển thị, xử lý qua đối tượng Reader

// Xem ví dụ 1.1 hoặc ví dụ 1.2

// …

// Đóng kết nối

cmdNorth.Connection.Close();

Ví d ụ 1.1: Đ o n ch ươ ng trình sau mô t ả vi ệ c đọ c d ữ li ệ u t ừ đố i t ượ ng reader và hi ể n th ị lên ListView

CustomerInfo cm; // Xem ví dụ 1.3

while (reader.Read())

{

cm = new CustomerInfo();

cm.CustId = reader.GetString(0);

cm.ContactName = reader.GetString(1);

if (reader.IsDBNull(2)) cm.CustAddress = "";

else cm.CustAddress =reader.GetString(2);

if (reader.IsDBNull(3)) cm.City = "";

else cm.City =reader.GetString(3);

ListViewItem lvItem = new ListViewItem(cm.CustId);

lvItem.SubItems.Add(cm.ContactName);

lvItem.SubItems.Add(cm.CustAddress);

lvItem.SubItems.Add(cm.City);

lvItem.Tag = cm;

lsvCustomer.Items.Add(lvItem);

}

Ví d ụ 1.2: Đ o n ch ươ ng trình sau mô t ả vi ệ c đọ c d ữ li ệ u t ừ đố i t ượ ng reader và hi ể n th ị lên DataGridView

ArrayList list = new ArrayList ();

CustomerInfo cm; // Xem ví dụ 1.3

while (reader.Read())

{

cm = new CustomerInfo();

cm.CustId = reader.GetString(0);

cm.ContactName = reader.GetString(1);

if (reader.IsDBNull(2)) cm.CustAddress = "";

else cm.CustAddress =reader.GetString(2);

if (reader.IsDBNull(3)) cm.City = "";

else cm.City =reader.GetString(3);

list.Add(cm);

Trang 3

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 3

}

dataGridView1.DataSource = list;

Ví d ụ 1.3: CustomerInfo là l ớ p mô t ả các thông tin v ề đố i t ượ ng Customer CustomerInfo

đượ c vi ế t nh ư sau:

public class CustomerInfo

{

string custId;

string contactName;

string custAddress;

string city;

public CustomerInfo() { }

public CustomerInfo(string custId, string contactName, string custAddress, string city)

{ this.custId = custId;

this.contactName = contactName;

this.custAddress = custAddress;

this.city = city;

} public string CustId {

get {return custId;}

set {custId = value;}

} public string ContactName {

get {return contactName;}

set {contactName = value;}

} public string CustAddress {

get {return custAddress;}

set {custAddress = value;}

} public string City {

get {return city;}

set {city = value;}

} }

Ví d 2: L ấ y d ữ li ệ u t ừ các Textbox: txtID, txtName, txt Ả ddress và txtCity để l ư u vào Database

và c ậ p nh ậ t m ớ i d ữ li ệ u hi ể n th ị trên form

private void cmdInsert_Click(object sender, System.EventArgs e)

{

// 1 Kết nối

string strConn = "server=(local); Database = Northwind; uid=sa; pwd=;";

SqlConnection cnNorth = new SqlConnection(strConn);

// 2 Thiết đặt câu lệnh thực thi

string sqlInsert= "insert into Customers(CustomerID, " +

"CompanyName, Address, City) values(@CustomerID, @CompanyName, "+

"@Address, @City)";

SqlCommand cmdNorth = new SqlCommand(sqlInsert, cnNorth);

cmdNorth.Parameters.Add("@CustomerID", SqlDbType.NChar);

cmdNorth.Parameters.Add("@CompanyName", SqlDbType.NChar);

cmdNorth.Parameters.Add("@Address", SqlDbType.NChar);

cmdNorth.Parameters.Add("@City", SqlDbType.NChar);

cmdNorth.Parameters[0].Value = txtID.Text;

cmdNorth.Parameters[1].Value = txtName.Text;

cmdNorth.Parameters[2].Value = txtAddress.Text;

Trang 4

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 4

cmdNorth.Parameters[3].Value = txtCity.Text;

// 3 Thực thi lệnh

cmdNorth.Connection.Open();

int kq = cmdNorth.ExecuteNonQuery();

if (kq > 0)

{

MessageBox.Show("Dữ liệu đã cập nhật!");

// Gi li hàm Load d liu Ví d 1

}

else

{

MessageBox.Show("Có lỗi xãy ra!");

}

cmdNorth.Connection.Close();

}

Ví d 3: Ch ọ n 1 dòng trên ListView d ữ li ệ u t ươ ng ứ ng s ẽ hi ể n th ị trên các TextBox

private void lsvCustomer_SelectedIndexChanged(object sender,

System.EventArgs e)

{

if (lsvCustomer.SelectedItems.Count == 0)

return;

CustomerInfo cm = lvCustomer.SelectedItems[0].Tag as CustomerInfo;

txtID.Text = cm.CustId;

txtName.Text = cm.ContactName;

txtAddress.Text = cm.CustAddress;

txtCity.Text = cm.City;

}

Ví d 4: L ư u d ữ li ệ u sau khi đ ã hi ệ u ch ỉ nh trên TextBox vào CSDL

private void cmdUpdate_Click(object sender, System.EventArgs e)

{

if (lsvCustomer.SelectedItems.Count == 0)

return;

// Lấy thông tin về đối tượng đang được chọn

CustomerInfo old = lsvCustomer.SelectedItems[0].Tag as CustomerInfo;

// Lấy thông tin sau khi đã chỉnh sửa

CustomerInfo cm = new CustomerInfo(txtID.Text, txtName.Text,

txtAddress.Text, txtCity.Text);

// 1 Đối tượng kết nối

string strConn = "server=(local); Database = Northwind; uid=sa; pwd=;"

SqlConnection cnNorth = new SqlConnection(strConn);

// 2 Câu lệnh thực thi

string sqlUpdate ="update Customers set CustomerID = "+

"@CustomerID, CompanyName = @CompanyName, Address = @Address, "+

"City = @City where CustomerID = @OrigCustomerID";

SqlCommand cmdNorth = new SqlCommand(sqlUpdate, cnNorth);

cmdNorth.Parameters.Add("@CustomerID", SqlDbType.NChar);

cmdNorth.Parameters.Add("@CompanyName", SqlDbType.NChar);

cmdNorth.Parameters.Add("@Address", SqlDbType.NChar);

cmdNorth.Parameters.Add("@City", SqlDbType.NChar);

cmdNorth.Parameters.Add("@OrigCustomerID", SqlDbType.NChar);

cmdNorth.Parameters[0].Value = cm.CustId;

cmdNorth.Parameters[1].Value = cm.ContactName;

cmdNorth.Parameters[2].Value = cm.CustAddress;

cmdNorth.Parameters[3].Value = cm.City;

cmdNorth.Parameters[4].Value = old.CustId;

// 3 Thực thi lệnh

cmdNorth.Connection.Open();

int kq = cmdNorth.ExecuteNonQuery();

if (kq > 0)

{

MessageBox.Show("Cập nhật thành công!");

//Gọi li phương thc Load d liu Ví d 1

}

else

Trang 5

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 5

MessageBox.Show("Lỗi!");

cmdNorth.Connection.Close();

}

Ví d 5: Xóa dòng đượ c ch ọ n

private void cmdDelete_Click(object sender, System.EventArgs e)

{

if (lsvCustomer.SelectedItems.Count == 0)

return;

// Lấy thông tin về đối tượng đang được chọn

CustomerInfo cm = lsvCustomer.SelectedItems[0].Tag as CustomerInfo;

// 1 Đối tượng kết nối

string strConn = "server=(local); Database = Northwind; uid=sa; pwd=;"

SqlConnection cnNorth = new SqlConnection(strConn);

// 2 Câu lệnh thực thi

string sqlUpdate ="Delete from Customers where CustomerID=@CustomerID";

SqlCommand cmdNorth = new SqlCommand(sqlUpdate, cnNorth);

cmdNorth.Parameters.Add("@CustomerID", SqlDbType.NChar);

cmdNorth.Parameters[0].Value = cm.CustId;

// 3 Thực thi lệnh

cmdNorth.Connection.Open();

int kq = cmdNorth.ExecuteNonQuery();

if (kq > 0)

{

MessageBox.Show("Cập nhật thành công!");

//Gọi li phương thc Load d liu Ví d 1

}

else

MessageBox.Show("Lỗi!");

cmdNorth.Connection.Close();

}

3 Bài tập

Bài 1: Thi ế t k ế CSDL và Xây d ự ng ứ ng d ụ ng qu ả n lý thông tin khách hàng v ớ i các yêu c ầ u sau:

- Form Đă ng nh ậ p: để đă ng nh ậ p tr ướ c khi s ử d ụ ng ứ ng d ụ ng

- Ki ể m tra d ữ li ệ u r ỗ ng tr ướ c khi th ự c

hi ệ n vi ệ c x ử lý đă ng nh ậ p

- N ế u đă ng nh ậ p thành công thì cho phép

s ử d ụ ng ph ầ n Qu ả n lý

- Form Qu ả n lý: có giao di ệ n nh ư hình bên d ướ i, form này để xem, thêm, s ử a, xóa thông tin

c ủ a khách hàng Các thông tin c ầ n qu ả n lý bao g ồ m: mã s ố , h ọ tên, ngày sinh, đị a ch ỉ ,

đ i ệ n tho ạ i, email, hình ả nh

o Thông tin khách hàng s ẽ hi ể n th ị ngay khi vào form Qu ả n lý

o Thêm m ớ i: thêm m ớ i 1 khách hàng vào CSDL

o C ậ p nh ậ t: Ch ỉ nh s ử a thông tin 1 khách hàng trong CSDL

o Xóa: Xóa thông tin m ộ t khách hàng

Trang 6

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 6

Phn 2 K ế t ni không th ườ ng xuyên (Disconnected Architecture)

1 Các bước thực hiện

B ướ c 1: Sử d ụ ng Connection để k ế t n ố i đế n c ơ s ở d ữ li ệ u

B ướ c 2: Tạ o đố i t ượ ng DataSet

B ướ c 3: Tạ o đố i t ượ ng DataAdapter và các câu l ệ nh th ự c thi trên d ữ li ệ u

B ướ c 4: Đổ d ữ li ệ u vào DataSet

B ướ c 5: Tươ ng tác, x ử lý d ữ li ệ u trên DataSet

B ướ c 6: Lư u vào CSDL

2 Ví dụ mẫu

Trang 7

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 7

{

private DataSet ds;

private SqlConnection objConn;

private SqlDataAdapter objDa;

private string STRCONN = "Server=.;Database=BMS;uid=sa;pwd=;" ;

public Form1()

{

InitializeComponent();

}

private void loadData()

{

objConn = new SqlConnection (STRCONN);

ds = new DataSet ();

objDa = new SqlDataAdapter ( "SELECT * FROM Books" , objConn);

//T ạ o các câu l ệ nh Insert, Update, Delete t ự độ ng

SqlCommandBuilder cmb = new SqlCommandBuilder (objDa);

objDa.Fill(ds, "Books" );

//Do du lieu len DataGridView

dataGridView1.DataSource = ds;

dataGridView1.DataMember = "Books" ;

//Bind du lieu len TextBox

txtID.DataBindings.Add( "Text" , ds, "Books.BookID" );

txtTypeID.DataBindings.Add( "Text" , ds, "Books.TypeID" );

txtTitle.DataBindings.Add( "Text" , ds, "Books.Title" );

txtPublisher.DataBindings.Add( "Text" , ds, "Books.Publisher" );

txtAuthor.DataBindings.Add( "Text" , ds, "Books.Author" );

txtPrice.DataBindings.Add( "Text" , ds, "Books.Price" ); }

private void Form1_Load( object sender, EventArgs e)

{

loadData();

}

private void cmdDelete_Click( object sender, EventArgs e)

{

int i = ( int ) this BindingContext[ds, "Books" ].Position;

ds.Tables[0].Rows[i].Delete();

objDa.Update(ds, "Books" );

}

{

txtID.Enabled = true ;

txtTypeID.Enabled = true ;

txtTitle.Enabled = true ;

txtAuthor.Enabled = true ;

txtPublisher.Enabled = true ;

txtPrice.Enabled = true ;

this BindingContext[ds, "Books" ].AddNew();

}

private void cmdUpdate_Click( object sender, EventArgs e)

{

//txtID.Enabled = true;

txtTypeID.Enabled = true ;

Trang 8

Hue-Aptech | Tr ầ n V ă n Long – Email: tvlongsp@gmail.com Trang 8

txtTitle.Enabled = true ;

txtAuthor.Enabled = true ;

txtPublisher.Enabled = true ;

txtPrice.Enabled = true ;

}

private void cmdSave_Click( object sender, EventArgs e)

{

objDa.Update(ds, "Books" );

}

}

3 Một số đoạn code mẫu

// Get current Rowposition

CurrencyManager cm = (CurrencyManager)this.BindingContext[ds,"Books"];

long rowPosition = (long)cm.Position;

cboTypeID.DataSource = ds;

cboTypeID.DisplayMember = "Books.TypeName";

cboTypeID.ValueMember = "Books.TypeID";

// Position to prev Record in Customer

private void btnPrev_Click(object sender, System.EventArgs e)

{

if (this.BindingContext[ds,"Books"].Position > 0)

{

this.BindingContext[ds,"Books"].Position ;

}

}

// Position to next Record in Customer

private void btnNext_Click(object sender, System.EventArgs e)

{

CurrencyManager cm = (CurrencyManager)this.BindingContext[ds,"Books"];

if (cm.Position < cm.Count - 1)

{

cm.Position++;

}

}

4 Bài tập

S ử d ụ ng Disconnected Architecture để làm l ạ i bài t ậ p ở Ph ầ n 1

Ngày đăng: 17/08/2012, 09:11

HÌNH ẢNH LIÊN QUAN

Thiết kế giao diện gồm các phần như hình sau: - Lập trình thực hành với C++
hi ết kế giao diện gồm các phần như hình sau: (Trang 1)
Hue-Aptech | Trần Văn Long – Email: tvlongsp@gmail.com Trang 2 - Lập trình thực hành với C++
ue Aptech | Trần Văn Long – Email: tvlongsp@gmail.com Trang 2 (Trang 2)
Ví dụ 1: đọc dữ liệu từ bảng Customers trong CSDL Northwind của SQL Server 2000 và hiển thị lên ListView và DataGridView hiển thị lên ListView và DataGridView  - Lập trình thực hành với C++
d ụ 1: đọc dữ liệu từ bảng Customers trong CSDL Northwind của SQL Server 2000 và hiển thị lên ListView và DataGridView hiển thị lên ListView và DataGridView (Trang 2)
- Form Quản lý: có giao diện như hình bên dưới, form này để xem, thêm, sửa, xóa thông tin của khách hàng - Lập trình thực hành với C++
orm Quản lý: có giao diện như hình bên dưới, form này để xem, thêm, sửa, xóa thông tin của khách hàng (Trang 5)

TỪ KHÓA LIÊN QUAN

w