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

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

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    40

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

    Code:
    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
    Ngày gia nhập
    02 2008
    Bài viết
    43

    Code:
    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

    Code:
            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
    Code:
    /// <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

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    294

    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!
    Is the moon rising...

  4. #4
    Ngày gia nhập
    04 2007
    Bài viết
    21

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

  5. #5
    Ngày gia nhập
    01 2008
    Bài viết
    40

    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.
    Đã được chỉnh sửa lần cuối bởi TCH : 30-12-2008 lúc 12:15 PM.

  6. #6
    Ngày gia nhập
    09 2007
    Bài viết
    724

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

    @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

    @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 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

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    294

    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ũ ^^!
    Đã được chỉnh sửa lần cuối bởi darkan : 30-12-2008 lúc 01:07 PM.
    Is the moon rising...

  8. #8
    Ngày gia nhập
    09 2007
    Bài viết
    724

    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 .

    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

  9. #9
    Ngày gia nhập
    02 2008
    Bài viết
    43

    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 á ^^!
    hì hì!! cái này thì bạn thấy ở code của mình có đoạn final đó !!! nó sẽ đóng kết nối khi hoàn thành công việc !!!

    Dùng adapter thì ko cần mở kết nối làm dzì!! cái đó mình đã truyền biến conn dzô cho nó hết rùi!!!

    Ở đây bạn có thể đẩy dzô dataset cũng được thui!!! nhưng khi select 1 cái thì nên dùng table cho tiện!!! (vì dataset thực chất là tập hợp các table thui!! )

    chúc thành công

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

  1. Truy vấn dữ liệu từ CSDL của một cty Du lich ?
    Gửi bởi TKTMJ-GTS trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 24-09-2013, 05:08 PM
  2. Truy vấn CSDL MySQL - PHP
    Gửi bởi nhadam2 trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 11-01-2011, 07:53 AM
  3. Một câu truy vấn có thể truy vấn cả CSDL Access và DBase trong C# ko?
    Gửi bởi thuchobiet trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 24-11-2010, 08:25 AM
  4. Tốc độ truy xuất chương trình có CSDL?
    Gửi bởi nguyenletri trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 13-04-2010, 10:29 AM
  5. Cần tìm hiểu về truy xuất CSDL FOX PRO với C#
    Gửi bởi webshot trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 1
    Bài viết cuối: 08-03-2009, 02:17 AM

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