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

Đề tài: Cho hỏi về CSDL

  1. #1
    Ngày gia nhập
    02 2008
    Nơi ở
    Hà Nội
    Bài viết
    9

    Mặc định Cho hỏi về CSDL

    Code:
    private void FillData(int data)
            {
                progressBar1.Value = 0;
                DataTable dataTable = new DataTable();
                OleDbDataAdapter DataAdapter = new OleDbDataAdapter("Select * From " + DataName[data] + " Order by Tu", DBConnection);
                DataAdapter.Fill(dataTable);
                progressBar1.Value = 50;
                Application.DoEvents();
                int d = dataTable.Rows.Count / 50;
                for (int i = 0; i < dataTable.Rows.Count; i++)
                {
                    DataGrid[data].Rows.Add(
                        dataTable.Rows[i][0].ToString(),
                        dataTable.Rows[i][1].ToString());
                    if (d!=0 && i % d == 0)
                    {
                        if (progressBar1.Value < 100) progressBar1.Value++;
                        Application.DoEvents();
                    }
                }
                dataTable.Dispose();
            }
    Đoạn code trên mình làm trong ct Từ điển. Nó load rất chậm đối với dữ liệu khoảng 40000 record. Mình muốn hỏi làm thế nào để đoạn trên nhanh lên như các ct từ điển khác. Mình muốn đưa cả nghĩa cả từ vào datagridview để tiện chỉnh sửa. cảm ơn trước

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

    Cái này trước đây có người hỏi rồi, bạn có thể tìm lại để tham khảo thêm. Các bạn lưu ý khi hỏi nên nói càng chi tiết càng tốt (bạn đang dùng Database loại gì, và vì sao bạn phải khổ sở đi load và add từng dòng như vậy, lại có cả progressBar nữa, chắc chỉ là để cho đẹp thôi đúng không?)...

    Bạn thử từ bỏ thói quen dùng OleDbDataAdapter và hãy dùng SqlDataAdapter xem sao? Tất cả các câu truy vấn hay thêm sửa xóa đều nên viết Store ở ngoài, luôn luôn là như vậy. Linh hoạt, gọn gàng, cực nhanh. Đây là một ví dụ:

    PHP Code:
    using System.Data.SqlClient
    PHP Code:
    int intFact1 0//Bien chua gia tri truyen vao tham so trong Store
    System.Data.DataTable tmpDataTb = new System.Data.DataTable();
    //De biet chinh xac chuoi Connection, hay tao moi mot //DataBindingSource cho DatagridView, no se tu dong sinh ra chuoi nay, //copy va paste vao la xong
    SqlConnection con1 = new SqlConnection("Data Source=.;Initial Catalog=Test;Integrated Security=True");
    SqlCommand cmd = new SqlCommand();
                    
                    
    cmd.Connection con1;
    cmd.CommandType CommandType.StoredProcedure;
                    
    con1.Open();
    cmd.CommandText "Project_Input"//Tên Store Proc 
    PHP Code:
    //Khai bao cac tham so truyen vao Store Proc (neu co)
    //Phai dat ten tham so @Factor1 giong het ten trong Store
    cmd.Parameters.Add("@Factor1"SqlDbType.Int); 
    cmd.Parameters["@Factor1"].Value intFact1
    PHP Code:
    //Lay data ra DataAdapter
    SqlDataAdapter tmpAdapter = new SqlDataAdapter(cmd);
    //Do du lieu vao bang            
    tmpAdapter.Fill(tmpDataTb);
    dataGridView1.DataSource tmpDataTb;
    //dataGridView1.Update();
                        
    con1.Close(); 
    Nếu gặp khó khăn, cứ mạnh dạn nêu ra nhé.
    Good luck!
    Đã được chỉnh sửa lần cuối bởi ccom : 03-02-2008 lúc 07:58 PM. Lý do: int intFact1 = 0;

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Hà Nội
    Bài viết
    9

    Mình dùng Database của Acess, hình như ko dùng được SqlClient thì phải (mình thử chuyển nhưng ko được)

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    TP.HCM
    Bài viết
    113

    Dùng thread để đổ dữ liệu lên lưới từng phần nhằm có cảm giác như nhanh hơn.

    Nhìn cái Explorer của Win thì biết, nếu mở một thư mục nào chứa nhiều file hay thư mục (như system32 chẳng hạn) nó sẽ không load hết mà load từ từ.

    Dùng với access thì hình như là olbDataAdapter, còn sql thì sqlDataAdapter có cơ chế đổ dữ liệu từng phần với (mẫu tin bắt đầu, mẫu tin kết thúc). Nếu không thích dùng thread thì có thể dùng sự kiện khác để load dữ liệu. Như xác định nếu chọn mẫu tin cuối thì load phần kế tiếp.
    Không có thời gian nên chỉ đưa ra ý tưởng vậy thôi khi nào rảnh sẽ code gợi ý

    Gác Kiếm

  5. #5
    Ngày gia nhập
    02 2008
    Nơi ở
    Hà Nội
    Bài viết
    9

    Cho mình hỏi tiếp nè : làm thế nào để select một đoạn từ vt thứ i đến vt thứ j trong database của acess. Cái autonumber hình như ko xài được nếu chỉnh sửa và xóa vì hình như chỉ tạo được các sô khác nhau thôi

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

    Mặc định Cho hỏi về CSDL

    Bạn dùng DataTable của ADO.NET ấy.Đổ dữ liệu vào Table có order rồi dùng cái rowindex mà tính.
    Mà bạn dùng dữ liệu lớn thì mình khuyên nên bỏ Access đi.Nếu dữ liệu của bạn nó phình ra tí nữa,cỡ 100,000 bản ghi thì Access ko chịu nổi nhiệt đâu ^^!
    Is the moon rising...

  7. #7
    Ngày gia nhập
    06 2007
    Nơi ở
    HCM
    Bài viết
    365

    Thực ra CSDL dùng Access MDB rất tốt vì nhỏ gọn và không sợ vấn để bản quyền .Còn việc nhanh hay chậm là do thiết kế hoặc thuật toán giải quyết vấn đề của bạn chuối , ít nhất là với phần mềm từ điển, tham khảo source của tienlbhoc trên diễn đàn này về từ điển nguồn mở để biết thêm,.

    Trích dẫn Nguyên bản được gửi bởi Trung49 Xem bài viết
    Cho mình hỏi tiếp nè : làm thế nào để select một đoạn từ vt thứ i đến vt thứ j trong database của acess. Cái autonumber hình như ko xài được nếu chỉnh sửa và xóa vì hình như chỉ tạo được các sô khác nhau thôi
    Các Adapter( SQLDataAdapter,OledbDataAdapter...) đều có các overload của function FILL cho phép truy xuất bao nhiêu bản ghi kể từ vị trí N trong DB ,rất hữu dụng khi load data theo từng page ví dụ
    Code:
     AnyOleDbDataAdapter.Fill(StartRecord, RowPerPage, AnyDataTable)

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

  1. Lỗi phông tiếng Việt khi đưa dữ liệu vào CSDL, mặc dù CSDL đã để là ntext?
    Gửi bởi tan408 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 10-05-2011, 03:31 PM
  2. Làm việc với CSDL bằng C#
    Gửi bởi quickshort trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 01-10-2009, 10:11 AM
  3. chuyển CSDL SQL2005 sang CSDL SQL2000
    Gửi bởi nthung trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 1
    Bài viết cuối: 08-04-2009, 02:45 PM
  4. Ngôn Ngữ sử dụng CSDL thời thượng
    Gửi bởi AdminPro trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 4
    Bài viết cuối: 26-03-2009, 08:27 AM
  5. cho hỏi về cách kết nối CSDL
    Gửi bởi nhutrung trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 25-02-2009, 07:58 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