Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Sử dụng SqlDataAdapter và SqlCommand???

  1. #1
    Ngày gia nhập
    06 2007
    Bài viết
    206

    Mặc định Sử dụng SqlDataAdapter và SqlCommand???

    Các bạn cho mình hỏi nên sử dụng thằng nào trong 2 thằng trên.

    Lúc trước để thực thi việc lấy dữ liệu mình sử dụng SqlDataAdapter:
    Visual C# Code:
    1. public DataTable getData(String strSelect)
    2.         {
    3.             SqlConnection con = new SqlConnection("string connection...");
    4.             SqlDataAdapter adap = new SqlDataAdapter(strSelect, con);
    5.             DataSet ds = new DataSet();
    6.             adap.Fill(ds);
    7.             conn().Close();
    8.             conn().Dispose();
    9.             return ds.Tables[0];
    10.         }
    Còn sử dụng để insert, update, delete thì mình sử dụng SqlCommand:
    Visual C# Code:
    1.  public bool update(string strCommand)
    2.         {
    3.             SqlConnection con = new SqlConnection("string connection...");
    4.             SqlCommand cmd = new SqlCommand(strCommand, con);
    5.            
    6.            
    7.             try
    8.             {
    9.                 cmd.ExecuteNonQuery();
    10.                 conn().Close();
    11.                 conn().Dispose();
    12.                 return true;
    13.             }
    14.             catch
    15.             {
    16.                 conn().Close();
    17.                 conn().Dispose();
    18.                 return false;
    19.             }
    20.         }

    Dòng code trên có lỗi gì thì mong các bạn chỉ giúp.

    Nếu sử dụng SqlCommand thì mình sử dụng đc Parameter, vậy còn sử dụng SqlDataAdapter thì sao đây.

    Còn cái này nữa, tại sao mình sử dụng SqlParameter[] ko đc vậy?
    Nên đành sử dụng ArrayList để lưu trữ các Parameter, nếu sử dụng thằng này thì có tốn bộ nhớ nhiều hay gì gì ko?

    Mong các bạn cho ý kiến!
    Đã được chỉnh sửa lần cuối bởi nth4 : 12-03-2009 lúc 09:04 AM. Lý do: s
    Thà để chửi dốt 1 lần, còn hơn ngu cả đời.

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

    Mình nghĩ code đơn giản nhất cho 1 class kết nối db là như thế này:
    Code:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace ProgStudy
    {
        public class CConnect
        {
            SqlConnection cn;
            SqlCommand cmd;
    
            public CConnect()
            {
                cn = new SqlConnection(GetConn());
                cmd = cn.CreateCommand();
            }
    
            private string GetConn()
            {
                CIni ini = new CIni();
                string sConn;
                sConn = "server=" + ini.IniReadValue("Connection", "Server");
                sConn += "database=" + AppDomain.CurrentDomain.BaseDirectory.ToString() + ini.IniReadValue("Connection", "Database");
                sConn += "uid=" + ini.IniReadValue("Connection", "ID");
                sConn += "pwd=" + ini.IniReadValue("Connection", "PW");
                return sConn;
            }
            
            public DataTable Load(string sSql, params SqlParameter[] para)
            {
                SqlDataAdapter da = new SqlDataAdapter();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = sSql;
                cmd.Parameters.Clear();
                foreach (SqlParameter p in para)
                    cmd.Parameters.Add(p);
                da.SelectCommand = cmd;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
    
            public void Execute(string sSql, params SqlParameter[] para)
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = sSql;
                cmd.Parameters.Clear();
                foreach (SqlParameter p in para)
                    cmd.Parameters.Add(p);
                cn.Close();
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }
        }
    }
    Bạn xem thử có giúp gì được ko nhé.
    Đã được chỉnh sửa lần cuối bởi huynguyen : 05-03-2009 lúc 07:42 PM.

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

    cách đơn giản nhất thay thế cho sức người là dùng tool kéo thả

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

    Trích dẫn Nguyên bản được gửi bởi nth4 Xem bài viết
    Các bạn cho mình hỏi nên sử dụng thằng nào trong 2 thằng trên.

    Lúc trước để thực thi việc lấy dữ liệu mình sử dụng SqlDataAdapter:
    CSharp Code: | Lựa chọn code | Ẩn/Hiện code |
    public DataTable getData(String strSelect)
    {
    SqlConnection con = new SqlConnection("string connection...");
    SqlDataAdapter adap = new SqlDataAdapter(strSelect, con);
    DataSet ds = new DataSet();
    adap.Fill(ds);
    conn().Close();
    conn().Dispose();
    return ds.Tables[0];
    }



    Còn sử dụng để insert, update, delete thì mình sử dụng SqlCommand:
    CSharp Code: | Lựa chọn code | Ẩn/Hiện code |
    public bool update(string strCommand)
    {
    SqlConnection con = new SqlConnection("string connection...");
    SqlCommand cmd = new SqlCommand(strCommand, con);

    conn().Close();
    conn().Dispose();
    try
    {
    cmd.ExecuteNonQuery();
    return true;
    }
    catch
    {
    return false;
    }
    }




    Dòng code trên có lỗi gì thì mong các bạn chỉ giúp.

    Nếu sử dụng SqlCommand thì mình sử dụng đc Parameter, vậy còn sử dụng SqlDataAdapter thì sao đây.

    Còn cái này nữa, tại sao mình sử dụng SqlParameter[] ko đc vậy?
    Nên đành sử dụng ArrayList để lưu trữ các Parameter, nếu sử dụng thằng này thì có tốn bộ nhớ nhiều hay gì gì ko?

    Mong các bạn cho ý kiến!
    Cách làm của bạn hơi..ngược , chỉ lấy dữ liệu thì nên dùng SqlCommand , vì nó nhẹ ký hơn so với dataAdapter ,nếu ghi dữ liệu thì lên dùng dataAdapter vì nó tiết kiệm công sức của bạn rất nhiều .Hãy thử tưởng tượng bạn cần cập nhập 1 row ,cập nhật có thể hiểu là 1 trong 3 thao tác : Insert, delete, update , nếu dùng dataadapter bạn giảm được 80% sô dòng code .Hơn nữa khi dùng dataadapter thì không cần open và close connection vì việc đó là tự động.Cuối cùng: Nên học cách dùng O/R mapping với typed dataset để đỡ mất công sức với những thao tác vụn vặt và lập trình thuần oop hơn .
    bonus : Đoạn code của bạn sai thấy rõ, thao tác close connection phải thực thi sau khi executenonequery

  5. #5
    Ngày gia nhập
    06 2007
    Bài viết
    206

    ủa, code đâu mất hết rồi
    Thà để chửi dốt 1 lần, còn hơn ngu cả đời.

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

    Mặc định Sử dụng SqlDataAdapter và SqlCommand???

    To Haipt: cảm ơn anh nhiều.
    Nếu anh có chút ít thời gian có thể post lên class kết nối chuẩn của anh đc không. Hay cách dùng cách dùng O/R mapping với typed dataset của anh bằng demo hay hình ảnh gì cũng đc, để tụi em có thể tham khảo cho chuẩn.
    Vì em thấy huynguyen cũng dùng SqlDataAdapter để lấy dữ liệu, SqlCommand để update dữ liệu giống em. Anh cho chúng em tham khảo luôn.

    Mong anh giúp đỡ!
    Thà để chửi dốt 1 lần, còn hơn ngu cả đời.

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

    giúp thì giúp cho trót đi anh.
    Thà để chửi dốt 1 lần, còn hơn ngu cả đời.

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

    huynguyen ơi, CIni là lớp nào vậy?
    Thà để chửi dốt 1 lần, còn hơn ngu cả đời.

  9. #9
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Cái CIni là lớp tui tự thiết kế để đọc file ini thôi
    Về vấn đề của Haipt nói thì thiệt tình là tui cũng chưa hiểu rõ ý của anh Haipt.

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

    Gửi các bạn hai bài thực hành mẫu với ADO.NET
    dataUpdate Demo 5 là code mẫu cho việc update dataSource bằng cách thiết lập ba command: Delete,insert,Update để DataAdapter cập nhật hàng loạt, bạn có thể chỉnh sửa chán chê trên dataGrid, nhấn delete để xóa dòng, khi nhấn update thì database mới được cấp nhật.Bài test này chủ yếu dùng để deomo cơ chế làm việc của ADO.NET, sinh viên cần đào sâu thêm : - tại sao data adapter phải setup 3 command để cập nhật dữ liệu và cơ chế tương tác như thế nào ?? các biện pháp xử lý xung đột trong môi trường multi user ?, bài này dùng SQL SERVER, backup file có sẵn trong thư mục DATA.

    AspNtier demo là bài mẫu demo cho kỹ thuật xậy dựng ứng dụng đa lớp với .NET, typed dataset được tách thành 2 lớp dataAccess và DataEntities, các thao thác dữ liệu không hề thông qua 1 SQL statement nào mà thông qua các lớp thực thể .Database Access
    Attached Files Attached Files

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

  1. cách lấy dữ liệu bằng SqlDataAdapter?
    Gửi bởi phuongtv_hvktqs trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 3
    Bài viết cuối: 15-08-2012, 09:59 PM
  2. Không gian tên cho thuộc tính của đối tượng sqlcommand là gì?
    Gửi bởi kien681989 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 08-11-2011, 02:13 AM
  3. Không truyền được SqlDataAdapter vào hàm
    Gửi bởi MYNAM trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 12-07-2011, 02:21 PM
  4. Lỗi câu lệnh sqlcommand.Parameters.Add(sqldatareader.GetInt32(0 ))
    Gửi bởi tungwert trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 12-06-2010, 04:40 PM
  5. Không cập nhật được CSDL bằng SqlCommand
    Gửi bởi ddhung trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 22-03-2010, 05:19 PM

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