Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: chọn cách truy vấn database trong ASP.NET

  1. #1
    Ngày gia nhập
    02 2010
    Bài viết
    7

    Angry 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

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Trích dẫn Nguyên bản được gửi bởi conbogamco6590 Xem bài viết
    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ở.

  3. #3
    Ngày gia nhập
    02 2010
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    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.

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Đã 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.

  5. #5
    Ngày gia nhập
    08 2011
    Nơi ở
    Gia Lâm - Hà Nội
    Bài viết
    25

    Thao tác csdl mình thường tạo 1 lớp riêng (DAL)
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Configuration;
    6. using System.Data.SqlClient;
    7. using System.Data;
    8. {
    9.     public class DataService
    10.     {
    11.         string ChuoiKetNoi = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    12.         SqlTransaction ts;
    13.         public SqlConnection TaoKetNoi()
    14.         {
    15.             return new SqlConnection(ChuoiKetNoi);
    16.         }
    17.         public SqlDataAdapter TaoAdapter(string sql, params SqlParameter[] lstparam)
    18.         {
    19.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    20.             da.SelectCommand.Parameters.AddRange(lstparam);
    21.             SqlCommandBuilder cb = new SqlCommandBuilder(da);
    22.             return da;
    23.         }
    24.         public SqlDataAdapter TaoAdapterStore(string sql, params SqlParameter[] lstparam)
    25.         {
    26.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    27.             da.SelectCommand.CommandType = CommandType.StoredProcedure;
    28.             da.SelectCommand.Parameters.AddRange(lstparam);            
    29.             SqlCommandBuilder cb = new SqlCommandBuilder(da);
    30.             return da;
    31.         }
    32.         public SqlDataReader ViewReaderStore(string sql, params SqlParameter[] lstparam)
    33.         {
    34.             SqlConnection KetNoi = TaoKetNoi();
    35.             KetNoi.Open();
    36.             SqlCommand cmd = new SqlCommand(sql, KetNoi);
    37.             cmd.Parameters.AddRange(lstparam);
    38.             cmd.CommandType = CommandType.StoredProcedure;
    39.             SqlDataReader dr = cmd.ExecuteReader();
    40.             return dr;
    41.         }
    42.         public SqlDataReader ViewReader(string sql, params SqlParameter[] lstparam)
    43.         {
    44.             SqlConnection KetNoi = TaoKetNoi();
    45.             KetNoi.Open();
    46.             SqlCommand cmd = new SqlCommand(sql, KetNoi);
    47.             cmd.Parameters.AddRange(lstparam);
    48.             cmd.CommandType = CommandType.Text;
    49.             SqlDataReader dr = cmd.ExecuteReader();
    50.             return dr;
    51.         }
    52.         public DataTable ViewTableParam(string sql, params SqlParameter[] lstparam)
    53.         {
    54.             SqlDataAdapter da = new SqlDataAdapter(sql,ChuoiKetNoi);
    55.             da.SelectCommand.Parameters.AddRange(lstparam);
    56.             DataTable dt = new DataTable();
    57.             da.Fill(dt);
    58.             return dt;
    59.         }
    60.         public DataTable ViewTableParamStore(string sql, params SqlParameter[] lstparam)
    61.         {
    62.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    63.             da.SelectCommand.CommandType = CommandType.StoredProcedure;
    64.             da.SelectCommand.Parameters.AddRange(lstparam);
    65.             DataTable dt = new DataTable();
    66.             da.Fill(dt);
    67.             return dt;
    68.         }
    69.         public DataTable ViewTable(string sql)
    70.         {
    71.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    72.             DataTable dt = new DataTable();
    73.             da.Fill(dt);
    74.             return dt;
    75.         }
    76.         public void ExeCuteStore(string sql, params SqlParameter[] lstparam)
    77.         {
    78.             SqlConnection KetNoi = TaoKetNoi();
    79.             try
    80.             {              
    81.                 KetNoi.Open();
    82.                 ts = KetNoi.BeginTransaction();
    83.                 SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);
    84.                 cmd.Parameters.AddRange(lstparam);
    85.                 cmd.CommandType = CommandType.StoredProcedure;
    86.                 cmd.ExecuteNonQuery();
    87.                 ts.Commit();
    88.                 cmd.Dispose();
    89.                 KetNoi.Close();
    90.             }
    91.             catch(Exception ex)
    92.             {
    93.                 ts.Rollback();
    94.                 KetNoi.Close();
    95.                 throw (ex);
    96.             }
    97.            
    98.         }
    99.         public string ExeCuteScalarStore(string sql, params SqlParameter[] lstparam)
    100.         {
    101.             SqlConnection KetNoi = TaoKetNoi();
    102.             string Kq;
    103.             try
    104.             {
    105.                 KetNoi.Open();
    106.                 ts = KetNoi.BeginTransaction();
    107.                 SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);
    108.                 cmd.Parameters.AddRange(lstparam);
    109.                 cmd.CommandType = CommandType.StoredProcedure;
    110.                 Kq = cmd.ExecuteScalar().ToString();
    111.                 ts.Commit();
    112.                 return Kq;
    113.                 cmd.Dispose();
    114.                 KetNoi.Close();
    115.             }
    116.             catch (Exception ex)
    117.             {
    118.                 ts.Rollback();
    119.                 KetNoi.Close();
    120.                 throw (ex);
    121.             }
    122.  
    123.         }
    124.         public void ExeCute(string sql, params SqlParameter[] lstparam)
    125.         {
    126.             SqlConnection KetNoi = TaoKetNoi();
    127.             try
    128.             {              
    129.                 KetNoi.Open();
    130.                 ts = KetNoi.BeginTransaction();
    131.                 SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);
    132.                 cmd.Parameters.AddRange(lstparam);
    133.                 cmd.CommandType = CommandType.Text;
    134.                 cmd.ExecuteNonQuery();
    135.                 ts.Commit();
    136.                 cmd.Dispose();
    137.                 KetNoi.Close();
    138.             }
    139.             catch (Exception ex)
    140.             {
    141.                 ts.Rollback();
    142.                 KetNoi.Close();
    143.                 throw (ex);
    144.             }
    145.         }      
    146.     }    
    147. }
    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!
    Không có gì tiết kiệm thời gian và tiền bạc hơn là yêu ngay từ cái nhìn đầu tiên.

  6. #6
    Ngày gia nhập
    02 2010
    Bài viết
    7

    Mặc định chọn cách truy vấn database trong ASP.NET

    Các hàm insert, update, delete, trả về là int (row effect) thì hay, với lại, tham số đầu vào cũng nên là mảng String.
    Thanks.

  7. #7
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    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 gia nhập
    02 2010
    Bài viết
    7

    Thanks so much ltvit0602,VoTichSu.

  9. #9
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    Trích dẫn Nguyên bản được gửi bởi ltvit0602 Xem bài viết
    Thao tác csdl mình thường tạo 1 lớp riêng (DAL)
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Configuration;
    6. using System.Data.SqlClient;
    7. using System.Data;
    8. {
    9.     public class DataService
    10.     {
    11.         string ChuoiKetNoi = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    12.         SqlTransaction ts;
    13.         public SqlConnection TaoKetNoi()
    14.         {
    15.             return new SqlConnection(ChuoiKetNoi);
    16.         }
    17.         public SqlDataAdapter TaoAdapter(string sql, params SqlParameter[] lstparam)
    18.         {
    19.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    20.             da.SelectCommand.Parameters.AddRange(lstparam);
    21.             SqlCommandBuilder cb = new SqlCommandBuilder(da);
    22.             return da;
    23.         }
    24.         public SqlDataAdapter TaoAdapterStore(string sql, params SqlParameter[] lstparam)
    25.         {
    26.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    27.             da.SelectCommand.CommandType = CommandType.StoredProcedure;
    28.             da.SelectCommand.Parameters.AddRange(lstparam);            
    29.             SqlCommandBuilder cb = new SqlCommandBuilder(da);
    30.             return da;
    31.         }
    32.         public SqlDataReader ViewReaderStore(string sql, params SqlParameter[] lstparam)
    33.         {
    34.             SqlConnection KetNoi = TaoKetNoi();
    35.             KetNoi.Open();
    36.             SqlCommand cmd = new SqlCommand(sql, KetNoi);
    37.             cmd.Parameters.AddRange(lstparam);
    38.             cmd.CommandType = CommandType.StoredProcedure;
    39.             SqlDataReader dr = cmd.ExecuteReader();
    40.             return dr;
    41.         }
    42.         public SqlDataReader ViewReader(string sql, params SqlParameter[] lstparam)
    43.         {
    44.             SqlConnection KetNoi = TaoKetNoi();
    45.             KetNoi.Open();
    46.             SqlCommand cmd = new SqlCommand(sql, KetNoi);
    47.             cmd.Parameters.AddRange(lstparam);
    48.             cmd.CommandType = CommandType.Text;
    49.             SqlDataReader dr = cmd.ExecuteReader();
    50.             return dr;
    51.         }
    52.         public DataTable ViewTableParam(string sql, params SqlParameter[] lstparam)
    53.         {
    54.             SqlDataAdapter da = new SqlDataAdapter(sql,ChuoiKetNoi);
    55.             da.SelectCommand.Parameters.AddRange(lstparam);
    56.             DataTable dt = new DataTable();
    57.             da.Fill(dt);
    58.             return dt;
    59.         }
    60.         public DataTable ViewTableParamStore(string sql, params SqlParameter[] lstparam)
    61.         {
    62.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    63.             da.SelectCommand.CommandType = CommandType.StoredProcedure;
    64.             da.SelectCommand.Parameters.AddRange(lstparam);
    65.             DataTable dt = new DataTable();
    66.             da.Fill(dt);
    67.             return dt;
    68.         }
    69.         public DataTable ViewTable(string sql)
    70.         {
    71.             SqlDataAdapter da = new SqlDataAdapter(sql, ChuoiKetNoi);
    72.             DataTable dt = new DataTable();
    73.             da.Fill(dt);
    74.             return dt;
    75.         }
    76.         public void ExeCuteStore(string sql, params SqlParameter[] lstparam)
    77.         {
    78.             SqlConnection KetNoi = TaoKetNoi();
    79.             try
    80.             {              
    81.                 KetNoi.Open();
    82.                 ts = KetNoi.BeginTransaction();
    83.                 SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);
    84.                 cmd.Parameters.AddRange(lstparam);
    85.                 cmd.CommandType = CommandType.StoredProcedure;
    86.                 cmd.ExecuteNonQuery();
    87.                 ts.Commit();
    88.                 cmd.Dispose();
    89.                 KetNoi.Close();
    90.             }
    91.             catch(Exception ex)
    92.             {
    93.                 ts.Rollback();
    94.                 KetNoi.Close();
    95.                 throw (ex);
    96.             }
    97.            
    98.         }
    99.         public string ExeCuteScalarStore(string sql, params SqlParameter[] lstparam)
    100.         {
    101.             SqlConnection KetNoi = TaoKetNoi();
    102.             string Kq;
    103.             try
    104.             {
    105.                 KetNoi.Open();
    106.                 ts = KetNoi.BeginTransaction();
    107.                 SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);
    108.                 cmd.Parameters.AddRange(lstparam);
    109.                 cmd.CommandType = CommandType.StoredProcedure;
    110.                 Kq = cmd.ExecuteScalar().ToString();
    111.                 ts.Commit();
    112.                 return Kq;
    113.                 cmd.Dispose();
    114.                 KetNoi.Close();
    115.             }
    116.             catch (Exception ex)
    117.             {
    118.                 ts.Rollback();
    119.                 KetNoi.Close();
    120.                 throw (ex);
    121.             }
    122.  
    123.         }
    124.         public void ExeCute(string sql, params SqlParameter[] lstparam)
    125.         {
    126.             SqlConnection KetNoi = TaoKetNoi();
    127.             try
    128.             {              
    129.                 KetNoi.Open();
    130.                 ts = KetNoi.BeginTransaction();
    131.                 SqlCommand cmd = new SqlCommand(sql, KetNoi, ts);
    132.                 cmd.Parameters.AddRange(lstparam);
    133.                 cmd.CommandType = CommandType.Text;
    134.                 cmd.ExecuteNonQuery();
    135.                 ts.Commit();
    136.                 cmd.Dispose();
    137.                 KetNoi.Close();
    138.             }
    139.             catch (Exception ex)
    140.             {
    141.                 ts.Rollback();
    142.                 KetNoi.Close();
    143.                 throw (ex);
    144.             }
    145.         }      
    146.     }    
    147. }
    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

  10. #10
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    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.

Các đề tài tương tự

  1. Database Hiển thị kết quả truy vấn database lên Lable trong WinForm
    Gửi bởi boyviplovegirl15 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 13
    Bài viết cuối: 05-07-2012, 10:40 PM
  2. Cách truy vấn database trong Entity FrameWork 4.0
    Gửi bởi nvtlucky trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 21-03-2012, 05:29 PM
  3. Sử dụng LINQ truy vấn table Menu Đa cấp trong Database?
    Gửi bởi Ne7ven trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 31-03-2011, 04:55 PM
  4. Câu lệnh truy cập 1 Record trong SQL database bằng C# là gì?
    Gửi bởi ndp1007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 10-03-2010, 12:58 PM
  5. cách theo dõi user truy cập Database trong C# như thế nào?
    Gửi bởi minhduc0912 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 23-10-2009, 10:31 PM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn