Search This Blog

Thursday, July 19, 2012

Căn bản C# SQL: Bài 1. Ứng dụng quản lí nhân viên rất hồn nhiên

Trong loạt bài này tôi sẽ giới thiệu với các bạn một loạt ứng dụng C# SQL từ rất ngây thơ đến khá trưởng thành.
bài 1 này sẽ là 1 ứng dụng hết sức ngây thơ để quản lý nhân viên với 2 thuộc tính : ID (khóa chính) & tên.
Cơ sở dữ liệu


Các bạn chú ý chỗ tôi khoanh đỏ, điều này sẽ giải thích cho việc tôi insert vào csdl có 2 trường nhưng chỉ truyền 1 tham số. chi tiết thì mời GOOGLE nhé!
Các bước thực hiện:
1. Mở visual studio và tạo 1 Project Winform Application sau đó thiết kế 1 form đơn giản như sau :


Chi tiết các trường :
Loại Tên Note
DataGridView dgv
DataBindingSource dbs
Label label1 Text = "Họ tên"
Text Box txtName
Button btnAdd Text="Thêm"
Button btnUpd Text="Cập nhật"
Button btnDel Text="Xóa"
right-click vào form chọn View Source và viết code sau
private void LoadData() {
    string strCon = @"Data Source=.\SQLEXPRESS;Initial Catalog=cong_ty_x;Integrated Security=True;";
    string strSQL = "select * from nhan_vien";

    SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQL, strCon);
    SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
    DataTable table = new DataTable();
    //table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    dataAdapter.Fill(table);
    dbs.DataSource = table;
    dgv.DataSource = dbs;
}
click phải chọn "view designer"
double click vào btnAdd và viết code sau:
private void btnAdd_Click(object sender, EventArgs e) {
    string connString = @"Data Source=.\SQLEXPRESS;Initial Catalog=cong_ty_x;Integrated Security=True;";
    string name = txtName.Text;
    SqlConnection con = new SqlConnection(connString);
    try {
        con.Open();
        string sql = "insert into nhan_vien(name) values('" + name + "')";

        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.ExecuteNonQuery();
        this.LoadData();
    } catch (Exception ex) {
        MessageBox.Show(ex.Message);
    } finally {
        con.Close();
    }
}
tương tự ta có code xử lý cho btnUpd và btnDel
private void btnUpd_Click(object sender, EventArgs e) {
    string connString = @"Data Source=.\SQLEXPRESS;Initial Catalog=cong_ty_x;Integrated Security=True;";
    
    string id = dgv.CurrentRow.Cells[0].Value.ToString();
    string name = txtName.Text;
    
    SqlConnection con = new SqlConnection(connString);
    try {
        con.Open();
        string sql = "update nhan_vien set name = '" + name + "' where id = " + id;
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.ExecuteNonQuery();
        this.LoadData();
    } catch (Exception ex) {
        MessageBox.Show(ex.Message);
    } finally {
        con.Close();
    }
}

private void btnDel_Click(object sender, EventArgs e) {
    string connString = @"Data Source=.\SQLEXPRESS;Initial Catalog=cong_ty_x;Integrated Security=True;";
    string id = dgv.CurrentRow.Cells[0].Value.ToString();
    SqlConnection con = new SqlConnection(connString);
    try {
        con.Open();
        string sql = "delete nhan_vien where id = " + id;
        SqlCommand cmd = new SqlCommand(sql, con);
        int count = cmd.ExecuteNonQuery();
        this.LoadData();
    } catch (Exception ex) {
        MessageBox.Show(ex.Message);
    } finally {
        con.Close();
    }
}
để khi user di chuyển con trỏ trên "danh sách nhân viên thì họ tên sẽ được load vào text box Name, ta xử lý sự kiện Cell Enter của đối tượng dgv như sau:
trở lại mode Designer, chọn dgv, nhấn F4 hiện bảng properties, chọn danh sách event, double click vào sự kiện CellEnter và viết code như bên dưới
private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) {
    txtName.Text = dgv.CurrentRow.Cells[1].Value.ToString();
}

Hai câu hỏi để bài 1 này ko quá nhàm chán:
1. Đối tượng data grid view có thể nhận trực tiếp dữ liệu từ Data Table, tại sao phải dùng Data Binding Source
2. Cách tôi xử lý behavior "khi user thay đổi con trỏ trên danh sách nhân viên, tên nhân viên sẽ dc load vào text box bên dưới" bằng  dgv_CellEnter sẽ quăng exception khi chọn dòng cuối và click delete. làm sao để sửa lỗi này?

Source code của bài 1 này (được viết bằng Visual Studio 2008 Express) có thể dc download ở trang google code của bài này. GOOGLE code là 1 ứng dụng rất hay để chia sẻ source cho lập trình viên, và ko ai share source trong download list cả, tuy nhiên để tiện cho các bạn sinh viên lần đầu làm quen, mình cho vào download list nhé!

Thảo luận về bài này trên cộng đồng c Việt

Phật giáo vs cúng sao

Nhiều người nói Phật giáo bây giờ biến tướng, cúng sao giải hạng mê tín dị đoan... Nhưng mất đi cái đó rồi, nhóm những con người có ít họ...