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 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Truy vấn CSDL kiểu này thì trình biên dịch làm gì?

    Mã:
    com6 = new SqlCommand("SELECT MASV FROM SINHVIEN WHERE MASV = '" + user1.Text + "'", conn4);
                                conn4.Open();
                                com6.Connection = conn4;
                                myreader3 = com6.ExecuteReader();
    Khi truy vấn CSDL như trên thì VS sẽ chỉ lấy 1 mẩu tin là kết quả truy vấn từ bên SQL server, hay SQL sẽ đổ toàn bộ CSDL qua bên VS để VS truy vấn chọn ra một mẫu tin?
    Mình muốn chỉ lấy 1 mẫu tin là kết quả của việc truy vấn thôi thì cách thực hiện là thế nào? Cám ơn.

  2. #2

    P/S: Post xong mới thấy bài của zk ^^! Cái connection đó không cần mở đâu em ^^! Nếu dùng Fill của DataAdapter, ko gán connection qua constructor thì nó giữ nguyên trạng thái. Tức là nếu connection đang close nó sẽ open, sau đó close lại. Còn nếu là open thì vẫn như cũ ^^!
    hì thank anh đã nhắc [IMG]images/smilies/smile.png[/IMG].

    Từ trước tới giờ em luôn làm 1 việc là openconnection trước khi làm gì đó và close connection trước khi hết chuyện đó. giờ mới biết là thằng SqlDataAdapter cơ chế của nó là như vậy [IMG]images/smilies/biggrin.png[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Công nhận ví dụ của bạn c1inme hay ^^!

    Vừa nói người ta ko chịu mở connection(mặc dù người ta đã mở) là mình làm luôn, chả thấy mở connection ở đâu ^^! Code của bạn mà chạy được thì Dark cũng thấy lạ đấy ^^!

    @ TCH : Database server chỉ đẩy dữ liệu mà bạn truy vấn về phía client thôi chứ ko có đẩy nguyên cái db về đâu ^^!

    Và nữa là bạn nên hạn chế cách tạo dynamic sql bằng kiểu cộng các string lại với nhau thế kia. Nên sử dụng parameter ^^!

    Cheers!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi darkan
    Công nhận ví dụ của bạn c1inme hay ^^!

    Vừa nói người ta ko chịu mở connection(mặc dù người ta đã mở) là mình làm luôn, chả thấy mở connection ở đâu ^^! Code của bạn mà chạy được thì Dark cũng thấy lạ đấy ^^!

    Cheers!
    Đoạn code láy dữ liệu của bạn c1inme có vấn đề gì đâu chạy ầm ầm
    Theo mình đựoc biết thì dùng SqlDataAdapter thì không cần phải Open connection nữa [IMG]images/smilies/biggrin.png[/IMG] [IMG]images/smilies/biggrin.png[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    com6 = new SqlCommand("SELECT MASV FROM SINHVIEN WHERE MASV = '" + user1.Text + "'", conn4);
                                conn4.Open();
                                com6.Connection = conn4;
                                myreader3 = com6.ExecuteReader();
    Bạn chưa mở kết nối sao mà dùng sqlcommand được !!

    Đây là đoạn code mình hay dùng

    Mã:
            private SqlConnection m_Conn = null;
            private DataTable m_MyTable;
            private SqlDataAdapter m_MyAdapter;
            private SqlCommand m_MyCommand;
    
    public DataTable LayHinhThucThanhToan()
            {
                try
                {
                    m_Conn = new SqlConnection(this.m_ConnectString);                
                    m_MyAdapter = new SqlDataAdapter("select * From tblHinhThucThanhToan", m_Conn);
                    m_MyTable = new DataTable();                
                    m_MyAdapter.Fill(m_MyTable);
    
                }
                catch (Exception err)
                {
                    MessageBox.Show("Lỗi ở việc load hình thức thanh toán : " + err.Message);
                }
                finally
                {
                    if (m_Conn != null)
                        m_Conn.Close();
                }
                return m_MyTable;
            }
    Đoạn trên là mình dùng sqldataAdapter để lấy dữ liệu ra và đẩy vào table !!



    Đây là đoạn code dùng sqlCommand để đưa dữ liệu dzô CSDL
    Mã:
    /// <summary>
            /// Hàm nhập dữ liệu cho hóa đơn mua lẽ chi tiết
            /// </summary>
            /// <param name="hoaDonMuaLeChiTiet">TblHoaDonMuaLeChiTietInfo</param>
            /// <returns>bool</returns>
            public bool NhapHoaDonMuaLeChiTiet(BusinessOject.TblHoaDonMuaLeChiTietInfo hoaDonMuaLeChiTiet)
            {
    
                try
               {
                    
                    m_Conn = new SqlConnection(this.m_ConnectString);
                    m_Conn.Open();
                    m_MyCommand = new SqlCommand("sp_InsertTblHoaDonMuaLeChiTiet", m_Conn);
                    m_MyCommand.CommandType = CommandType.StoredProcedure;
                  
                    hoaDonMuaLeChiTiet.HoaDonMuaLeId = LaySoHoaDonID(hoaDonMuaLeChiTiet.SoHoaDon);
                   
                    m_MyCommand.Parameters.Add("@HoaDonMuaLeId", SqlDbType.Int).Value = hoaDonMuaLeChiTiet.HoaDonMuaLeId;
                    m_MyCommand.Parameters.Add("@SoThuTu", SqlDbType.Int).Value = hoaDonMuaLeChiTiet.SoThuTu;
                    m_MyCommand.Parameters.Add("@HangId", SqlDbType.Int).Value = hoaDonMuaLeChiTiet.HangId;
                    m_MyCommand.Parameters.Add("@SoLuong", SqlDbType.Decimal).Value = hoaDonMuaLeChiTiet.SoLuong;
                    m_MyCommand.Parameters.Add("@DonGia", SqlDbType.Decimal).Value = hoaDonMuaLeChiTiet.DonGia;
                    m_MyCommand.Parameters.Add("@ThanhTien", SqlDbType.Decimal).Value = hoaDonMuaLeChiTiet.ThanhTien;
    
                    m_MyCommand.ExecuteNonQuery();
                    return true;           
    
                     
                }
                catch (Exception err)
                {
                    MessageBox.Show("Lỗi ở việc nhập dữ liệu vào bảng hóa mua lẻ chi tiết : "+ err.Message);
                  return false;
                }
               finally
               {
                    if (m_Conn != null)
                        m_Conn.Close();
               }
                return false;
            }
    chúc thành công

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hic, cái đoạn code của mình nó có phần connection ở bên trên ah (không có ghi trong này, nói chung bài này mình làm rồi đúng hoàn toàn luôn nhưng hơi dở). Mình chỉ muốn hỏi cách truy vấn CSDL sao cho tối ưu, sao cho nó truy vấn được nhanh nhất (không tính cú pháp bên SQL, chỉ tính cách thực hiện bên VB), ít tốn phí tổn hệ thống nhất.
    Tại yêu cầu của thầy mình bắt là không được đẩy toàn bộ CSDL bên SQL qua bên VS vì sẽ rất nặng. Nhưng mình chưa biết cách truy vấn nào chỉ lấy kết quả từ câu lệnh truy vấn bên VB thôi. Cách của c1inme mình cũng biết luôn, vì thầy mình chỉ mà, mình biết 3 cách để truy vấn csdl (cách còn lại là cho vô dataset gần gần giống cách mình trình bày đầu tiên).
    Dù sao cũng cám ơn các bạn.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @TCH:
    Nếu muốn chạy nhanh và Server không bị 'tổn thọ' thì bạn nên viết ra proceduce ở database để lấy dữ liệu về.

    Khi lấy dữ liệu về chỉ cần gọi cái proc đó.

    Nên hạn chế viết select select kiểu này rất nguy hiểm nếu khoảng trăm Request select hay insert data vào thì cái server của bạn đi bụi chắc kèo [IMG]images/smilies/biggrin.png[/IMG]

    @tlhmhung: sở dĩ thằng SqlDataAdapter bạn không cần gọi câu lệnh kết nối vì trong cái phương thức khởi tạo của nó bạn cho 1 biến connection vào rồi [IMG]images/smilies/smile.png[/IMG] nó sẽ connect cho bạn, chứ nếu bạn thử set các thuộc tính cho nó, không set connection cho cái thằng này thì thử hỏi chuyện gì sẽ xảy ra[IMG]images/smilies/thinking.gif[/IMG] [IMG]images/smilies/waiting.gif[/IMG]

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Oh,sozzy ^^!

    Đọc lướt qua ko để ý là DataAdapter, cứ nghĩ là SqlCommand hết.

    Dùng DataAdapter thì không thể chạy được khi connection đang mở ^^! Nếu gán connection qua constructor của DataAdapter yêu cầu connection phải đóng nó mới chịu chứ mở là đi luôn á ^^!

    @ THC : Chả hiểu bạn định hỏi cái gì? Có bao giờ ADO.NET vác nguyên cả cục database về phía client đâu? Bạn select cái gì nó trả về cái đó thôi.

    Cheers!

    P/S: Post xong mới thấy bài của zk ^^! Cái connection đó không cần mở đâu em ^^! Nếu dùng Fill của DataAdapter, ko gán connection qua constructor thì nó giữ nguyên trạng thái. Tức là nếu connection đang close nó sẽ open, sau đó close lại. Còn nếu là open thì vẫn như cũ ^^!

 

 

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
  •