Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9
  1. #1
    Trích dẫn Gửi bởi ltvit0602
    Thao tác csdl mình thường tạo 1 lớp riêng (DAL)

    Mã:
    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data.SqlClient;using System.Data;namespace DAL{    public class DataService    {        string ChuoiKetNoi = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;        SqlTransaction ts;        public SqlConnection TaoKetNoi()        {            return new SqlConnection(ChuoiKetNoi);        }        public SqlDataAdapter TaoAdapter(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            da.SelectCommand.Parameters.AddRange(lstparam);            SqlCommandBuilder cb = new SqlCommandBuilder(da);            return da;        }        public SqlDataAdapter TaoAdapterStore(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            da.SelectCommand.CommandType = CommandType.StoredProcedure;            da.SelectCommand.Parameters.AddRange(lstparam);                        SqlCommandBuilder cb = new SqlCommandBuilder(da);            return da;        }        public SqlDataReader ViewReaderStore(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            KetNoi.Open();            SqlCommand cmd = new SqlCommand(sql, KetNoi);            cmd.Parameters.AddRange(lstparam);            cmd.CommandType = CommandType.StoredProcedure;            SqlDataReader dr = cmd.ExecuteReader();            return dr;        }        public SqlDataReader ViewReader(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            KetNoi.Open();            SqlCommand cmd = new SqlCommand(sql, KetNoi);            cmd.Parameters.AddRange(lstparam);            cmd.CommandType = CommandType.Text;            SqlDataReader dr = cmd.ExecuteReader();            return dr;        }        public DataTable ViewTableParam(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql,ChuoiKetNoi);            da.SelectCommand.Parameters.AddRange(lstparam);            DataTable dt = new DataTable();            da.Fill(dt);            return dt;        }        public DataTable ViewTableParamStore(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            da.SelectCommand.CommandType = CommandType.StoredProcedure;            da.SelectCommand.Parameters.AddRange(lstparam);            DataTable dt = new DataTable();            da.Fill(dt);            return dt;        }        public DataTable ViewTable(string sql)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            DataTable dt = new DataTable();            da.Fill(dt);            return dt;        }        public void ExeCuteStore(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            try            {                               KetNoi.Open();                ts = KetNoi.BeginTransaction();                SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);                cmd.Parameters.AddRange(lstparam);                cmd.CommandType = CommandType.StoredProcedure;                cmd.ExecuteNonQuery();                ts.Commit();                cmd.Dispose();                KetNoi.Close();            }            catch(Exception ex)            {                ts.Rollback();                KetNoi.Close();                throw (ex);            }                    }        public string ExeCuteScalarStore(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            string Kq;            try            {                KetNoi.Open();                ts = KetNoi.BeginTransaction();                SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);                cmd.Parameters.AddRange(lstparam);                cmd.CommandType = CommandType.StoredProcedure;                Kq = cmd.ExecuteScalar().ToString();                ts.Commit();                return Kq;                cmd.Dispose();                KetNoi.Close();            }            catch (Exception ex)            {                ts.Rollback();                KetNoi.Close();                throw (ex);            }         }        public void ExeCute(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            try            {                               KetNoi.Open();                ts = KetNoi.BeginTransaction();                SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);                cmd.Parameters.AddRange(lstparam);                cmd.CommandType = CommandType.Text;                cmd.ExecuteNonQuery();                ts.Commit();                cmd.Dispose();                KetNoi.Close();            }            catch (Exception ex)            {                ts.Rollback();                KetNoi.Close();                throw (ex);            }        }           }    }
    Khi nào cần gọi method nào thì gọi nó thôi! đỡ pải viết đi viết lại nhiều. Tham số params SqlParameter[] lstparam này khi truyền vào có thể có hoặc ko!
    cái DAL này còn tối ưu thêm được nhiều lắm [IMG]images/smilies/smile.png[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    chọn cách truy vấn database trong ASP.NET

    Tình hình là mình đang chuẩn bị làm project hết lỳ bằng asp.net.
    Mình đang thắc mác không biết nên truy vấn database bằng cách nào
    Thông thường là dùng dataSet. không biết có cách nào khách hay hơn không.
    có phải là LINQ là hay nhất không, nếu có cho mình xin tài liệu với.
    Thanks

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi conbogamco6590
    Tình hình là mình đang chuẩn bị làm project hết lỳ bằng asp.net.
    Mình đang thắc mác không biết nên truy vấn database bằng cách nào
    Thông thường là dùng dataSet. không biết có cách nào khách hay hơn không.
    có phải là LINQ là hay nhất không, nếu có cho mình xin tài liệu với.
    Thanks
    Không hiểu tại sao quý vị chưa bắt đầu làm lại cứ hay thắc mắc "cách nào hay hơn"

    Khi làm project, người ta tạo một thư viện (thường là 1 file common, vd. Common_DBInterface.cs) chứa các lớp chuyên truy vấn Dbase. Trong lúc tiến hành project sẽ nảy sinh ra những vấn đề mà một phương pháp sẽ không còn thích ứng, phải chuyển sang phương pháp khác. Khi project chạy êm rồi thì mới truy xét lại xem cách tối ưu mà chỉnh sửa các lớp này.

    Mới "đang chuẩn bị" đừng nên tốn thì giờ cho chuyện này.

    tb. dùng dataset, tableadapter, hay linq gì gì đó tùy theo trình độ phức tạp của sử lý dữ liệu. Hỏi khơi khơi như vậy ai trả lời là người ấy đoán mò rồi nói theo sách vở.

  4. #4
    Trích dẫn Gửi bởi VoTichSu
    Không hiểu tại sao quý vị chưa bắt đầu làm lại cứ hay thắc mắc "cách nào hay hơn"

    Khi làm project, người ta tạo một thư viện (thường là 1 file common, vd. Common_DBInterface.cs) chứa các lớp chuyên truy vấn Dbase. Trong lúc tiến hành project sẽ nảy sinh ra những vấn đề mà một phương pháp sẽ không còn thích ứng, phải chuyển sang phương pháp khác. Khi project chạy êm rồi thì mới truy xét lại xem cách tối ưu mà chỉnh sửa các lớp này.

    Mới "đang chuẩn bị" đừng nên tốn thì giờ cho chuyện này.

    tb. dùng dataset, tableadapter, hay linq gì gì đó tùy theo trình độ phức tạp của sử lý dữ liệu. Hỏi khơi khơi như vậy ai trả lời là người ấy đoán mò rồi nói theo sách vở.
    Theo kinh nghiệm của cậu thì. ưu và nhược của các cách trên xem thế nào. Nghe có vẻ tớ thích một lớp truy vấn. cậu có không cho tơ xin.

  5. #5
    Đã nói tùy theo tình trạng phức tạp sử lý dữ liệu. Theo kinh nghiệm thì cái nào càng đơn giản càng tốt. Sau khi tiến hành đến gần giai đoạn cuối của coding, sẽ lòi ra ưu nhược điểm.

    Lớp truy vấn có nghĩa là một static class cung cấp những methods (hàm) để làm các công việc liên quan đến CSDL. Tiêu biểu một hàm truy vấn sẽ làm hết các công việc kết nối, truy vấn, và trả về datatable (hoặc update gì gì đó).

    Có lớp này rồi, trong chương trình chính, mỗi khi cần lấy một datatable từ CSDL, ta chỉ cần gọi hàm tương ứng của lớp, nạp tham số là câu lệnh SQL, hết.

    Nếu có cần update thì cũng gọi hàm tương ứng và nạp câu lệnh SQL.

    Dân viết LTHDT chuyên nghiệp luôn luôn có những static class làm những việc chung chung như vầy.

    Tôi không cho code được vì nó là sở hữu trí tuệ của Cty.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thao tác csdl mình thường tạo 1 lớp riêng (DAL)

    Mã:
    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data.SqlClient;using System.Data;namespace DAL{    public class DataService    {        string ChuoiKetNoi = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;        SqlTransaction ts;        public SqlConnection TaoKetNoi()        {            return new SqlConnection(ChuoiKetNoi);        }        public SqlDataAdapter TaoAdapter(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            da.SelectCommand.Parameters.AddRange(lstparam);            SqlCommandBuilder cb = new SqlCommandBuilder(da);            return da;        }        public SqlDataAdapter TaoAdapterStore(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            da.SelectCommand.CommandType = CommandType.StoredProcedure;            da.SelectCommand.Parameters.AddRange(lstparam);                        SqlCommandBuilder cb = new SqlCommandBuilder(da);            return da;        }        public SqlDataReader ViewReaderStore(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            KetNoi.Open();            SqlCommand cmd = new SqlCommand(sql, KetNoi);            cmd.Parameters.AddRange(lstparam);            cmd.CommandType = CommandType.StoredProcedure;            SqlDataReader dr = cmd.ExecuteReader();            return dr;        }        public SqlDataReader ViewReader(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            KetNoi.Open();            SqlCommand cmd = new SqlCommand(sql, KetNoi);            cmd.Parameters.AddRange(lstparam);            cmd.CommandType = CommandType.Text;            SqlDataReader dr = cmd.ExecuteReader();            return dr;        }        public DataTable ViewTableParam(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql,ChuoiKetNoi);            da.SelectCommand.Parameters.AddRange(lstparam);            DataTable dt = new DataTable();            da.Fill(dt);            return dt;        }        public DataTable ViewTableParamStore(string sql, params SqlParameter[] lstparam)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            da.SelectCommand.CommandType = CommandType.StoredProcedure;            da.SelectCommand.Parameters.AddRange(lstparam);            DataTable dt = new DataTable();            da.Fill(dt);            return dt;        }        public DataTable ViewTable(string sql)        {            SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);            DataTable dt = new DataTable();            da.Fill(dt);            return dt;        }        public void ExeCuteStore(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            try            {                               KetNoi.Open();                ts = KetNoi.BeginTransaction();                SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);                cmd.Parameters.AddRange(lstparam);                cmd.CommandType = CommandType.StoredProcedure;                cmd.ExecuteNonQuery();                ts.Commit();                cmd.Dispose();                KetNoi.Close();            }            catch(Exception ex)            {                ts.Rollback();                KetNoi.Close();                throw (ex);            }                    }        public string ExeCuteScalarStore(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            string Kq;            try            {                KetNoi.Open();                ts = KetNoi.BeginTransaction();                SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);                cmd.Parameters.AddRange(lstparam);                cmd.CommandType = CommandType.StoredProcedure;                Kq = cmd.ExecuteScalar().ToString();                ts.Commit();                return Kq;                cmd.Dispose();                KetNoi.Close();            }            catch (Exception ex)            {                ts.Rollback();                KetNoi.Close();                throw (ex);            }         }        public void ExeCute(string sql, params SqlParameter[] lstparam)        {            SqlConnection KetNoi = TaoKetNoi();            try            {                               KetNoi.Open();                ts = KetNoi.BeginTransaction();                SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);                cmd.Parameters.AddRange(lstparam);                cmd.CommandType = CommandType.Text;                cmd.ExecuteNonQuery();                ts.Commit();                cmd.Dispose();                KetNoi.Close();            }            catch (Exception ex)            {                ts.Rollback();                KetNoi.Close();                throw (ex);            }        }           }    }
    Khi nào cần gọi method nào thì gọi nó thôi! đỡ pải viết đi viết lại nhiều. Tham số params SqlParameter[] lstparam này khi truyền vào có thể có hoặc ko!

  7. #7
    ChuoiKetNoi không hề thay đổi, nên đặt nó là static. Như vậy các hàm không liên quan đến transaction có thể được đặt thành static (hàm static chỉ được sử dụng biến static).

    Như vậy lúc chỉ cần truy vấn dữ liệu, không phải dùng transaction thì không cần phải dựng đối tượng, có thể gọi thẳng hàm qua tên lớp.

    Tham số dạng params (lstparam) dùng để tránh SQL injection khi dựng câu SQL có tham số.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thanks so much ltvit0602,VoTichSu.

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chủ nói là "đang chuẩn bị" làm đồ án. Giai đoạn này chỉ cần viết sơ sơ vài class để bắt đầu làm việc thôi. Cứ lo tối ưu mãi thì biết chừng nào mới xong.

    Trong lúc khai triển code, gọi hàm vài chục lần thì tự động biết chúng có thể tối ưu chỗ nào.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •