Đây có phải là một lớp trong mô hình 3 lớp?

em đang thắc mắc code này có phải là 1 lớp trong mô hình ba lớp hay không và nó sẽ thực thi trung gian kết nối csdl như thế nào mà các from khác chỉ cần goi tới sử dụng là kết nối tới csdl

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
using System.Deployment.Application;

namespace QLNS
{
    class Clsdatabase
    {
        // chuỗi kết nối
       string strconnect = "Data Source=.;Initial Catalog=QLNS;Integrated Security=True";
        SqlConnection sqlcon;//khai báo biến sqlcon kiểu sqlConnection
        SqlCommand sqlcom;//khai báo biến sqlcom kiểu SqlCommand
        SqlDataAdapter sqlda;//khai báo sqlda kiểu SqlDataAdapter
        SqlDataReader sqldr;//khai báo sqldr kiểu SqlDataReader
        DataSet ds = new DataSet();//cái này có ý nghĩa gì ạ ?
        

        void ketnoi()
        {
            sqlcon = new SqlConnection(strconnect);
            sqlcon.Open(); 
        }

        void ngatketnoi()
        {
            sqlcon.Close();
        } 

        public void thucthiketnoi(string strsql)
        {
            ketnoi();
            sqlcom = new SqlCommand(strsql, sqlcon);
            sqlcom.ExecuteNonQuery();
            ngatketnoi();
        }

        public void loaddatagridview(DataGridView dg, string strselect)
        {
            ds.Clear();
            sqlda = new SqlDataAdapter(strselect, strconnect);
            sqlda.Fill(ds, "tenbang");
            dg.DataSource = ds.Tables[0];
        }

        public void loaddatagridview1(DataGridView dg,DataSet ds1, string strselect)
        {
            ds1.Clear();
            sqlda = new SqlDataAdapter(strselect, strconnect);
            sqlda.Fill(ds1, "tenbang");
            dg.DataSource = ds1.Tables[0];
        }

        public void loadcombobox(ComboBox cb, string strselect, byte chiso)
        {
            ketnoi();
            sqlcom = new SqlCommand(strselect, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                cb.Items.Add(sqldr[chiso].ToString());
            }
            ngatketnoi();
        }

        public void loadtextbox(TextBox cb, string strselect)
        {
            ketnoi();
            sqlcom = new SqlCommand(strselect, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                cb.Text = sqldr[0].ToString();
            }
            ngatketnoi();
        }

        public void loaddatetime(DateTimePicker cb, string strselect,byte chiso)
        {
            ketnoi();
            sqlcom = new SqlCommand(strselect, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                cb.Text = sqldr[chiso].ToString();
            }
            ngatketnoi();
        }

        public void loadtextboxchiso(TextBox cb, string strselect,byte chiso)
        {
            ketnoi();
            sqlcom = new SqlCommand(strselect, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                cb.Text = sqldr[chiso].ToString();
            }
            ngatketnoi();
        }

        public string getdata(string dauvao, string strsql)
        {
            string strketqua = "";
            ketnoi();
            sqlcom = new SqlCommand(strsql, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                if (sqldr[0].ToString().ToLower() == dauvao.ToLower())
                    strketqua = sqldr[1].ToString();
            }
            ngatketnoi();
            return strketqua;
        }

        public bool kt(string dauvao, string strsql, byte chiso)
        {
            bool ok = false;
            ketnoi();
            sqlcom = new SqlCommand(strsql, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                if (sqldr[chiso].ToString().ToLower() == dauvao.ToLower())
                    ok = true;
            }
            ngatketnoi();
            return ok;
        }

        public string thu(string dauvao, string strsql)
        {
            string strketqua = "";
            ketnoi();
            sqlcom = new SqlCommand(strsql, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                if (sqldr[0].ToString().ToLower() == dauvao.ToLower())
                    strketqua = sqldr[0].ToString();
            }
            ngatketnoi();
            return strketqua;
        }

        public bool kttrungkhoa(string dauvao, string strsql)
        {
            bool ok = false;
            ketnoi();
            sqlcom = new SqlCommand(strsql, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                if (sqldr[0].ToString().ToLower() == dauvao.ToLower())
                    ok = true;
            }
            ngatketnoi();
            return ok;
        }

        public void loatextbox(TextBox tb, string strselect, byte chiso)
        {
            ketnoi();
            sqlcom = new SqlCommand(strselect, sqlcon);
            sqldr = sqlcom.ExecuteReader();
            while (sqldr.Read())
            {
                tb.Lines[0] = (sqldr[chiso].ToString());
            }
            ngatketnoi();
        }

    }
}

Bài đã được di chuyển sang topic mới phù hợp hơn – Đạt

các anh giúp em hiểu code cho từng thao tác được không ạ ? em chỉ hiểu tới đó thôi cái khai báo dataSet có ý nghĩa gì thế ạ

Code này làm gì vậy em? Giải thích từng thao tác mất thời gian lắm. Em cần làm gì với code này?

@dangh có thời gian giúp giúp bro
@bachtiensinh

em đang thắc mắc code này có phải là 1 lớp trong mô hình ba lớp hay không và nó sẽ thực thi trung gian kết nối csdl như thế nào mà các from khác chỉ cần goi tới sử dụng là kết nối tới csdl

A ngĩ cái này không phải mô hình 3 lớp, cái class DataBase dc tách ra để làm riêng nhiệm vụ kết nối và xử lý dữ liệu thôi.Hình như có liên quan tới cái design pattern, mà a không nhớ kiểu nào. Có gì e search gg nhé.

Chỉ nhìn 1 class thì khó có thể đoán được 3 lớp hay không. Mình viết 3 lớp cũng hay tách riêng phần xử lý các thành phần chung vào phương thức kết nối database luôn chẳng hạn như phương thức truy vấn trả về datatable hay truy vấn xử lý trả về số rows đc thực thi. Nhưng không phải 3 lớp viết kiểu này cũng đc, có thể người ta chỉ tách một phần nhỏ ra 1 class riêng để quản lý. Nếu lớp này chính là 1 lớp trong mô hình 3 lớp thì nó là lớp DTO.
Về câu hỏi thứ 2 hình như bạn bị mất căn bản, nó kết nối với database đc là nhờ đối tượng SqlConnection.

Đây không được gọi là 1 lớp trong mô hình 3 tier đâu bạn. Các tầng trong mô hình 3 lớp bao gồm:

  1. Entities: Khai báo những đối tượng trong Database
  2. DataAccess: Thao tác với cơ sở dữ liệu
  3. Business: Xử lý các lỗi logic.
  4. Presentation: Tầng giao diện của người dùng, ở đây người dùng chỉ cần gọi lại phương thức của Business. Và không được xử lý các lỗi Logic ở tầng này. Bắt các lỗi ngoại lệ và ghi lại logs hệ thống nếu có lỗi xảy ra. (Ví dụ: Trên môi trường của Developer thì còn có chương trình để Debug, nhưng khi cấu hình lên 1 hệ thống khác thì bắt buộc phải sử dụng logs mới biết được hệ thống lỗi chỗ nào và đưa ra phương án xử lý).

Minh sẽ viết 1 tài liệu chi tiết về phần này và tải lên trong thời gian sớm nhất nếu bạn cần.

Đây là Auto post của http://daynhauhoc.com hay sao vại ? Mình chưa hiểu lắm :man_with_gua_pi_mao:

Nếu bạn muốn tìm hiểu overview 1 chút về mô hình 3 lớp, xin xem link này http://en.wikipedia.org/wiki/Multitier_architecture .

Three-tier architecture:

  1. Presentation tier
    This is the topmost level of the application. The presentation tier displays information related to such services as browsing merchandise, purchasing and shopping cart contents. It communicates with other tiers by which it puts out the results to the browser/client tier and all other tiers in the network. (In simple terms it is a layer which users can access directly such as a web page, or an operating systems GUI)

  2. Application tier (business logic, logic tier, or middle tier)
    The logical tier is pulled out from the presentation tier and, as its own layer, it controls an application’s functionality by performing detailed processing.

  3. Data tier
    The data tier includes the data persistence mechanisms (database servers, file shares, etc.) and the data access layer that encapsulates the persistence mechanisms and exposes the data. The data access layer should provide an Application Programming Interface (API) to the application tier that exposes methods of managing the stored data without exposing or creating dependencies on the data storage mechanisms. Avoiding dependencies on the storage mechanisms allows for updates or changes without the application tier clients being affected by or even aware of the change. As with the separation of any tier, there are costs for implementation and often costs to performance in exchange for improved scalability and maintainability.

Cái này là 3 tầng bác ơi, không phải ba lớp (layer) :smile:

1 Like

Ban đầu, mình đoán bạn sẽ đưa source code của lớp Provider/Helper nhưng nhìn kỹ thì source code này không được xếp vào Provider/Helper… Lớp Provider/Helper thì mình thường viết để hỗ trợ cho lớp DAO (Data Access Object) trong mô hình 3-layers…

Lý do, thường thì Provider/Helper mình thấy chỉ có hàm open/close Connection, executeQuery và executeNonQuery mà thôi… Còn lớp DAO thì dùng để lấy dữ liệu của một đối tượng nào đó. Ví dụ: PersonDAO, EmployeeDAO,…

Cơ mà mấy bác dễ nhầm 3-layers và 3-tiers quá nhỉ?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?