Wednesday, February 22, 2012

LESSION1: INTRODUCTION TO OOP CONCEPT (CLASS, PARTIAL KEYWORD, CONSTRUCTOR, DESTRUCTOR, GARBAGE COLLECTOR, INHERITANCE)

Objectives:
ü      Hiểu về khái niệm, sử dụng OOP và OOP trong C#
ü      Tại sao phải mô tả từ khóa Partial cho Class và khai báo như thế nào?
ü      Implement Constructor và Destructor như thế nào?
ü      Kỹ thuật của .NET: Garbage Collector là gì?
ü      Overloading là gì và tại sao lại có khái niệm này?
ü      Chỉ dẫn: khái niệm về Inheritance(thừa kế) và Inheritance trong Partial Class
      ü      Tại sao chúng ta lại sử dụng Inheritance cho Project?

Exercises: Tạo ra Solutions và tên là Exercise01Soln
Bài 1: Add new Windows Application trong Exercise01Soln và tên là PartialPro
-Add new Class và tên là SqlServerProvider.cs

-        Declare Internal variables
connection kiểu String connectionString
command  kiểu String commandText
command type là commandType
errorMessage kiểu String errorMessage
-        Declare internal methods
Mở kết nối OpenConnection()
Đóng kết nối CloseConnection()
Declare constructor cho Class và gán giá trị mặc định cho connectionString
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace PartialPro
{
    partial class SqlServerProviders
    {
        internal string connectionString = string.Empty;
        internal string commandText = string.Empty;
        internal CommandType commandType;
        internal string errorMessage = string.Empty;
        internal SqlConnection sqlConnection = null;
        internal void OpenConnection()
        {
            try
            {
                sqlConnection = new SqlConnection(connectionString);
                sqlConnection.Open();
            }
            catch (Exception ex)
            {
                errorMessage += "OpenConnection" + ex.Message;
            }
        }
        internal void CloseConnection()
        {
            try
            {
                if (sqlConnection != null)
                {
                    sqlConnection.Close();
                    sqlConnection.Dispose();
                }
            }
            catch (Exception ex)
            {
                errorMessage += "CloseConnection" + ex.Message;
            }
        }
        internal SqlServerProviders()
        {
            connectionString = "server=(local);database=StudentManagementForProfessional;integrated security=true";
        }
    }
}
Bài 2: Tiếp túc với PartialPro Project
-        Add new Class và tên là DataTableProvider.cs
-        Đổi tên Class từ DataTableProvider thành SqlServerProviders
-        Sau đó khai báo từ khóa Partial cho cả 2 class DataTableProvider, SqlServerProviders (2 class khác tên File nhưng cùng tên Class)


      -        Định nghĩa Overloading Internal method (2 phương thức cùng tên, khác 1 trong: số parameter,  kiểu parameter,….) để lấy DataTable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace PartialPro
{
    partial class SqlServerProviders
    {
        DataTable dataTable = null;
        SqlCommand sqlCommand = null;
        SqlDataAdapter sqlDataAdapter = null;
        #region GetDataTable
        /// <summary>
        /// GetDataTable without parameter
        /// </summary>
        /// <returns>dataTable</returns>
        internal DataTable GetDataTable()
        {
            OpenConnection();
            sqlCommand = new SqlCommand(commandText,sqlConnection);           
            sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            sqlCommand.CommandType = commandType;
            dataTable = new DataTable();
            sqlDataAdapter.Fill(dataTable);
            CloseConnection();
            return dataTable;          
        }
        /// <summary>
        /// GetDataTable without parameter
        /// </summary>
        /// <param name="parameterName">set parameter name</param>
        /// <param name="parameterValues">set parameter values</param>
        /// <returns>dataTable</returns>
        internal DataTable GetDataTable(string parameterName,object parameterValues)
        {
            OpenConnection();
            sqlCommand = new SqlCommand(commandText, sqlConnection);
            sqlCommand.Parameters.AddWithValue(parameterName, parameterValues);
            sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            sqlCommand.CommandType = commandType;
            dataTable = new DataTable();
            sqlDataAdapter.Fill(dataTable);
            CloseConnection();
            return dataTable;
        }
        #endregion GetDataTable
    }
}

Bài 3: tiếp tục với Partial Project
-        Add DataGridView đến Form1
-        Add Button đến Form1 với name btnShow1 và text Show1

-        Viết sự kiện btnShow1_Click cho Button gọi GetDatatable()
     private void btnShow1_Click(object sender, EventArgs e)
        {
            SqlServerProviders sqlServerProviders = new SqlServerProviders();
            try
            {


                sqlServerProviders.commandText = "select * from Students";
                sqlServerProviders.commandType = CommandType.Text;
                dataGridView1.DataSource = sqlServerProviders.GetDataTable();
            }
            catch (Exception)
            {

                if (sqlServerProviders.errorMessage!="")
                {
                   
                }
            }
        }
-        Nhấn F5 để thấy kết quả
-        Add button đến Form1 với name btnShow2 và text Show2
-        Viết sự kiện btnShow1_Click cho Button gọi GetDataTable(string parameterName,Object parameterObject)
private void btnShow2_Click(object sender, EventArgs e)
        {
            SqlServerProviders sqlServerProviders = new SqlServerProviders();
            sqlServerProviders.commandText = "udsSelectOneStudentId";
            sqlServerProviders.commandType = CommandType.StoredProcedure;
            dataGridView1.DataSource = sqlServerProviders.GetDataTable("@StudentId", "STU01");
        }
-        Nhấn F5 để thấy kết quả
Bài 4: Thêm mới Windows Application vào  Exercise01Soln và tên là InheritancePro
-        Thêm mới class và tên là SqlServerProviders.cs
-        Khai báo biến protected và internal hoặc public properties cho
connectionString, commandText, errorMessage
-        Declare protected methods
OpenConnection(), CloseConnection()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace InheritancePro
{
    class SqlServerProviders
    {
        protected SqlConnection sqlConnection = null;
        protected string connectionString = string.Empty;
        protected string commandText = string.Empty;
        protected string errorMessage = string.Empty;
        protected CommandType commandType;
        internal string ConnectionString
        {
            get { return connectionString; }
            set { connectionString = value; }
        }
        internal string CommandText
        {
            get { return commandText; }
            set { commandText = value; }
        }
        internal CommandType CommandType
        {
            get { return commandType; }
            set { commandType = value; }
        }
        internal string ErrorMessage
        {
            get { return errorMessage; }
        }
        protected void OpenConnection()
        {
            sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString = connectionString;
            sqlConnection.Open();
        }

        protected void CloseConnection()
        {
            if (sqlConnection!=null)
            {
                sqlConnection.Close();               
            }
        }

    }
}
Bài 5: Tiếp tục với InheritancePro Project
-        Thêm class và tên DataTableProvider.cs
-        Khai báo kế thừa từ SqlServerProviders.cs
-        Định nghĩa phương thức overloading internal để lấy DataTable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace InheritancePro
{
    class DataTableProvider:SqlServerProviders
    {
        DataTable dataTable = null;
        SqlCommand sqlCommand = null;
        SqlDataAdapter sqlDataAdapter = null;
        #region GetDataTable

        /// <summary>
        /// GetDataTable without parameter
        /// </summary>
        /// <returns>dataTable</returns>
        internal DataTable GetDataTable()
        {
            OpenConnection();
            sqlCommand = new SqlCommand(commandText, sqlConnection);
            sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            sqlCommand.CommandType = commandType;
            dataTable = new DataTable();
            sqlDataAdapter.Fill(dataTable);
            CloseConnection();
            return dataTable;
        }
        /// <summary>
        /// GetDataTable without parameter
        /// </summary>
        /// <param name="parameterName">set parameter name</param>
        /// <param name="parameterValues">set parameter values</param>
        /// <returns>dataTable</returns>
        internal DataTable GetDataTable(string parameterName, object parameterValues)
        {
            OpenConnection();
            sqlCommand = new SqlCommand(commandText, sqlConnection);
            sqlCommand.Parameters.AddWithValue(parameterName, parameterValues);
            sqlDataAdapter = new SqlDataAdapter(sqlCommand);
            sqlCommand.CommandType = commandType;
            dataTable = new DataTable();
            sqlDataAdapter.Fill(dataTable);
            CloseConnection();
            return dataTable;
        }
        #endregion GetDataTable
    }
}

Bài 6: Tiếp tục với InheritancePro Project
-        Add DataGridView đến Form1
-        Add Button đến Form1 với name btnShow1 và text Show1

-        Viết sự kiện btnShow1_Click cho Button gọi GetDatatable()
private void btnShow1_Click(object sender, EventArgs e)
        {
            DataTableProvider dataTableProvider = new DataTableProvider();           
            dataTableProvider.ConnectionString = "server=(local);database=StudentManagementForProfessional;integrated security=true";
            dataTableProvider.CommandText = "select * from Students";
            dataTableProvider.CommandType = CommandType.Text;
            dataGridView1.DataSource= dataTableProvider.GetDataTable();
        }
-        Nhấn F5 để thấy kết quả
-        Add button đến Form1 với name btnShow2 và text Show2
-        Viết sự kiện btnShow2_Click cho Button gọi GetDataTable(string parameterName,Object parameterObject)
private void btnShow2_Click(object sender, EventArgs e)
        {
            DataTableProvider dataTableProvider = new DataTableProvider();
            dataTableProvider.ConnectionString = "server=(local);database=StudentManagementForProfessional;integrated security=true";
            dataTableProvider.CommandText = "udsSelectOneStudentId";
            dataTableProvider.CommandType = CommandType.StoredProcedure;
            dataGridView1.DataSource = dataTableProvider.GetDataTable("@StudentId", "STU01");
        }
-        Nhấn F5 để thấy kết quả

Bài 7: Tiếp tục với InheritancePro Project
-        Add class và tên là DataProvider.cs
-        Declare inherit từ SqlServerProviders.cs
-        Define method để thực thi câu lệnh SQL và SP có tham số và không có tham số
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace InheritancePro
{
    class DataProvider : SqlServerProviders
    {
        SqlCommand sqlCommand = null;
        internal void ExecuteNonQuery()
        {

            OpenConnection();
            sqlCommand = new SqlCommand(commandText, sqlConnection);
            sqlCommand.CommandType = commandType;
            sqlCommand.ExecuteNonQuery();

        }
        internal void ExecuteNonQuery(string parametername, object parameterObject)
        {
            OpenConnection();
            sqlCommand = new SqlCommand(commandText, sqlConnection);
            sqlCommand.CommandType = commandType;
            sqlCommand.Parameters.AddWithValue(parametername, parameterObject);
            sqlCommand.ExecuteNonQuery();

        }
        internal void ExecuteNonQuery(string[] parametername, object[] parameterObject)
        {
            OpenConnection();
            sqlCommand = new SqlCommand(commandText, sqlConnection);
            sqlCommand.CommandType = commandType;
            for (int i = 0; i < parametername.Length; i++)
            {
                sqlCommand.Parameters.AddWithValue(parametername[i], parameterObject[i]);
            }
            sqlCommand.ExecuteNonQuery();

        }
    }
}
Bài 8: Tiếp tục với InheritancePro Project
-        Add new Form2
-        Add 2 textbox đến Form2 và để người dùng có thể nhập vào ProvinceId, ProvinceName
-        Add button đến From2 và đặt tên là btnSave
Declare code btnSave_Click gọi phương thức ExecuteNonQuery(parameterName, parameterObject);
//create proc [dbo].[UdsStudents1207];3
//@provinceId char(5),
//@provinceName nvarchar(30)
//as
//begin
//insert into Provinces(ProvinceId,ProvinceName) values(@provinceId,@provinceName)
//end

private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                DataProvider clss = new DataProvider();
                clss.commandText = "UdsStudents1207;3";
                string[] parameterName = new string[2] { "@provinceId", "@provinceName" };
                string[] parameterObject = new string[2] { txtID.Text, txtName.Text };
                clss.ExecuteNonQuery(parameterName, parameterObject);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }            
 }
Bài 9: Tiếp tục với InheritancePro Project
Add new Form3 và add button name btnDelete
Viết sự kiện cho btnDelete_click gọi phương thức ExecuteNonQuery() tương tự bài 8.
create proc UdsDeleteProvinces
@provinceID varchar(5)
as
begin
delete from Provinces where ProvinceId=@provinceID
end

7 comments:

  1. Cảm ơn vì người đã tạo ra blog này. Đúng là những gì mình đang tìm kiếm.

    A sharepoint fan.

    ReplyDelete
  2. Cảm ơn bạn đã quan tâm, để nhận được bài mới bạn nên follow web của mình và tạo google +, mỗi lần có bài mới mình sẽ send mail tới thành viên.
    my skype: doquochung
    gmail: quochung211187@gmail.com

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. ơ anh, send cho em bài tập bên trên được không ạ, cảm ơn anh !
    anh chẳng post cơ sở dữ liệu em chẳng hiểu, với lại mới cái
    [clss.commandText = "UdsStudents1207;3";]
    [dataTableProvider.CommandText = "udsSelectOneStudentId";] ở đâu vậy ạ ?

    fugio198x@gmail.com

    ReplyDelete
  5. chao em, anh ko nho database anh de dau roi, nhung em cu thiet ke table binh thuong, con UdsStudents1207;3 ... do chinh la cac cau store khai bao trong SQL,

    //create proc [dbo].[UdsStudents1207];3
    //@provinceId char(5),
    //@provinceName nvarchar(30)
    //as
    //begin
    //insert into Provinces(ProvinceId,ProvinceName) values(@provinceId,@provinceName)
    //end

    Em co the tu viet store theo y cua minh. bai viet tren chu trong den cach dung ve OOP, nen em ko quan tam nhieu den cac store, con de hoc sau ve store thi o c# basic co viet rat ro, em co the search tren cac dien dan.
    Cam on em da quan tam

    ReplyDelete
  6. vâng, em cũng chưa tạo store bao giờ nhưng em biết là cái đó chỉ để gọn code hơn.
    nếu như em không dùng [clss.commandText = "UdsStudents1207;3";] mà
    viết như thế này anh xem em có viết đúng không nhé.
    { string str = "select * from Students";
    SqlCommand cmd = new SqlCommand(str, sqlConnection);
    cmd.CommandText = cmd; //UdsStudents1207;3
    cmd.ExecuteNonQuery();
    }

    ReplyDelete
  7. OK em,

    Thay vi em dung store thi em viet cau sql truc tiep nhu the cung dc, em nen hoc lai basic c# vi truoc khi hoc bai nay em phai rat thanh thao kien thuc ve c#. chuc em thanh cong nhe.

    ReplyDelete