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ố 14 kết quả

Đề tài: Lỗi kết nối CSDL?

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

    Mặc định Lỗi kết nối CSDL?

    Mình có 2 form, 1 form thì cho thêm dữ liệu ko sao hết, còn 1 form thì khi thực hiên thêm dữ liệu nó báo lỗi:
    The ConnectionString property has not been initialized

    Còn đây là các hàm tạo kết nối:
    Code:
    public class clsDAL
        {
            SqlConnection con;
            public clsDAL()
            {
                String strCon;
                strCon = "server=.;database=QLSanPham;uid=usQLSP;pwd=product;";
                con = new SqlConnection(strCon);
                con.Open();
            }      
                
            public int update(String sql)
            {
                int i;
                SqlCommand cmd;  
                cmd = new SqlCommand(sql, con);
                if (con.State == ConnectionState.Closed)
                    con.Open();
                i = cmd.ExecuteNonQuery();
                con.Dispose();
                return i;
            }
    
    public DataSet getDataGen(String sql)
            {
                SqlDataAdapter adap;
                DataSet ds;
                //con = connect();
                adap = new SqlDataAdapter(sql, con);
                if (con.State == ConnectionState.Closed)
                    con.Open();
                ds = new DataSet();
                adap.Fill(ds);
                con.Dispose();
                return ds;
            }
    
     public String getFirstValue(String sql)
            {
                String str;
                SqlCommand cmd;
                //con = connect();
                cmd = new SqlCommand(sql, con);
                if (con.State == ConnectionState.Closed)
                    con.Open();
                str = cmd.ExecuteScalar().ToString();
                con.Dispose();
                return str;
            }
        }
    
    ===================
    Hàm trong form cho thêm dữ liệu:
    Boolean tonTaiID;
                    tonTaiID = o.tonTaiIdNguyenLieuLoaiSP(nguyenLieu, loaiSP);
                    if (tonTaiID == true)
                    {
                        id = o.layIdNguyenLieuLoaiSP(nguyenLieu, loaiSP);
                    }
                    else
                    {
                        int themID;
                        themID = o.themIdNguyenLieuLoaiSP(nguyenLieu, loaiSP);                    
                         id = o.layIdVuaThem();                   
                    }
                    int themSP;
                    themSP = o.themSanPham(maSP, tenSP, moTa, quyCach, dongGoi, hinh, id);
    
    =========================
    Các hàm thực thi CSDL:
     public class clsBLL
        {
            DAL.clsDAL o;
            public clsBLL()
            {
                o = new clsDAL();
            }
    
    // do ton tai Nguyen Lieu - Loai San Pham
            public Boolean tonTaiIdNguyenLieuLoaiSP(String maNL, String maLoai)
            {
                int i;
                String sql;
                sql = "select 0 from NguyenLieuSanPham where maNL = '" + maNL + "' and maLoai = '" + maLoai + "'";
                i = o.getDataGen(sql).Tables[0].Rows.Count;
    
                if (i == 0)
                    return false;
                else
                    return true;
            }
    
     // lay ID Nguyen Lieu - Loai San Pham
            public int layIdNguyenLieuLoaiSP(String maNL, String maLoai)
            {
                int id;
                String sql;
                sql = "select ID from NguyenLieuSanPham where maNL = '" + maNL + "' and maLoai = '" + maLoai + "'";
                id =Convert.ToInt32(o.getFirstValue(sql));
                return id;
            }
    
    // them ID Nguyen Lieu - Loai San Pham
            public int themIdNguyenLieuLoaiSP(String maNL, String maLoaiSP)
            {
                int i;
                String sql;
                sql = "insert into NguyenLieuSanPham (maNL, maLoai) values ('" + maNL + "', '" + maLoaiSP + "')";
                i = o.update(sql);
                return i;
            }
    
    // them San Pham
            public int themSanPham(String maSP, String tenSP, String moTa, String quyCach, String dongGoi, String hinh, int id)
            {
                int i;
                String sql;
                sql = "insert into SanPham values ('" + maSP + "', N'" + tenSP + "', N'" + moTa + "', N'" + quyCach + "', N'" + dongGoi + "', '" + hinh + "', " + id + ")";
                i = o.update(sql);
                return i;
            }
    Hơi rối, nhưng mình dò mãi mà ko biết lỗi gì nữa, trong khi ở form khác thì thực hiện ko báo lỗi. Mà mình làm theo cách này hoài, lần đầu tiên gặp lỗi này.

    Mong các bạn giúp!
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 25-01-2008 lúc 12:02 AM.

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

    Sao mình upload từ diễn đàn ko được.

    Mình gởi link Project của mình, các bạn xem giúp mình sai chỗ nào!
    http://www.esnips.com/doc/e05518e5-8...6e/Project25_1

    Thanks các bạn!

  3. #3
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    đúng là có vấn đề

    tại sao lại mở connection bằng constructor rồi để nó chơi vơi...
    còn các method khác lại tự dưng xài được connection ???

    bạn nên thiết lập lại class xử lý lại connection
    nếu bạn muốn giữ kiểu kết nối thế này thì code sửa lại thêm một vài biến protected trong class để bảo lưu lại quá trình kết nối và access qua các properties mới đó.
    Tuy nhiên không khuyến khích kiểu kết nối thế này :|
    None!

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

    Mình cũng đã thử kiểu thế này nhưng vẫn báo lỗi y chang:
    Code:
     public class clsDAL
        {
            SqlConnection con;
            public clsDAL()
            {            
            }
            
            public SqlConnection connect()
            {
                String strCon;
                strCon = "server=.;database=QLSanPham;uid=usQLSP;pwd=product;";
                
                con = new SqlConnection(strCon);
                con.Open();
                return con;
            }
    
            public DataSet getData(String tblName)
            {
                String sql;
                sql = "select * from " + tblName;
                SqlDataAdapter adap;
                DataSet ds;
    
                con = connect();
                adap = new SqlDataAdapter(sql, con);
                if (con.State == ConnectionState.Closed)
                    con.Open();
    
                ds = new DataSet();
                adap.Fill(ds);
    
                con.Dispose();
                return ds;
            }
    
            public DataSet getDataGen(String sql)
            {
                SqlDataAdapter adap;
                DataSet ds;
    
                con = connect();
                adap = new SqlDataAdapter(sql, con);
                if (con.State == ConnectionState.Closed)
                    con.Open();
    
                ds = new DataSet();
                adap.Fill(ds);
    
                con.Dispose();
                return ds;
            }
    
            public int update(String sql)
            {
                int i;
                SqlCommand cmd;
                con = connect();
                cmd = new SqlCommand(sql, con);
    
                if (con.State == ConnectionState.Closed)
                    con.Open();
    
                i = cmd.ExecuteNonQuery();
                con.Dispose();
                return i;
            }
    
            public String getFirstValue(String sql)
            {
                String str;
                SqlCommand cmd;
                con = connect();
                cmd = new SqlCommand(sql, con);
    
                if (con.State == ConnectionState.Closed)
                    con.Open();
    
                str = cmd.ExecuteScalar().ToString();
                con.Dispose();
                return str;
            }
        }
    Cảm ơn bạn đã hướng dẫn, bạn có thể cho mình xem 1 đoạn code mấu về hàm kết nối CSDL có chức năng giống trên được ko?

    Nhưng mình ko nghĩ là các hàm kết nối CSDl có vấn đề.
    Vì mình cũng có 1 form thêm dữ liệu, nó thực hện ngon lành chứ ko có báo lỗi nhưng form này.
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 25-01-2008 lúc 12:29 AM.

  5. #5
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trước khi ngủ nháp cho bạn đúng theo cách của bạn, tất nhiên tớ không khoái cách này

    PHP Code:
    public class clsDAL
    {
        
    SqlConnection connection;
        
        public 
    clsDAL()
        {
            
    connection = new SqlConnection();
        }
        public 
    clsDAL(string connectionstring)
        {
            
    connection = new SqlConnection(connectionstring);
        }

        
    ///
        /// Methods
        ///

        // Open connection
        
    public boolean OnConnect()
        {
            try 
            {
                
    connection.Open();
                return 
    true;    
            } catch (
    Exception ex
            {
                return 
    false;
            }
        }
        
    // Check connection state
        
    public boolean OnOpeningState()
        {
            if(
    connection.State == ConnectionState.Open
                return 
    true;
            return 
    false;
        }
        
    // Update info
        
    public int OnUpdate(string sql)
        {
            if(!
    OnOpeningState())
                return -
    1// thuong thi -1 chi dinh FAIL

            // Neu ket noi dang open choi voi thi xu ly not
            // ....
            
        
    }
        
    // Get dataset
        
    public DataSet OnRetrieveDataGen(string sql// getDataGen(string sql)
        
    {    
            if(!
    OnOpeningState())
                return 
    NULL// trường hợp chẳng lấy được gì hết

            // Neu ket noi dang open choi voi thi xu ly not
            // ....                 
        
    }
        
    // Get First value
        
    public string OnRetrieveFirstValue(string sql// getFirstValue(string sql)
        
    {
            if(!
    OnOpeningState())
                return 
    NULL// nếu không được gì hết 

            // Neu ket noi dang open choi voi thi xu ly not
            // ....    
        
    }
        
    // Close Connection
        
    public boolean OnClose()
        {
            try
            {
                
    connection.Close();
                return 
    true;
            } catch (
    Exception ex)
            {            
                return 
    false;
            }
        }    
        
    ///
        /// GHI CHU:
        ///    1. Neu su dung the nay thi sau khi lam xong dam bao luon dong ket noi
        ///    2. Co the xu ly dong ket noi ngay sau khi su dung cac method chinh: OnUpdate, OnRetrieveDataGen, OnRetrieveFirstValue
        ///    3. Cach lam nay lam connection choi voi va ton hao tai nguyen nen khong khuyen khich
        ///    4. Cai nay to' nhap thoi, cho~ nao sai thi sua nhe :D

    Đã được chỉnh sửa lần cuối bởi Xcross87 : 25-01-2008 lúc 12:31 AM.
    None!

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

    Mặc định Lỗi kết nối CSDL?

    bạn cho mình xem cách của bạn được chứ!

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Bạn thử làm trọn vẹn bài của bạn sau đó, đọc kĩ 4 cái comment của mình ở dưới .
    sau đó tự tạo ra 1 bài kết nối nho nhỏ xử lý database. Nghĩ xem có bao nhiêu cách truy vấn dữ liệu từ database và làm cách nào thì tốt hơn

    Thử loanh quanh mấy bài viết cổ của Cviet xem
    None!

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

    nhưng sao những project khác mình làm kiểu đó đều được hết trơn, chỉ có mỗi project này là báo lỗi.

    Mình đã thử để khởi tạo chuỗi kết nối trong mối hàm thì sử dụng bình thường.

    Ko biết bị gì nữa!

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

    Đoạn code này tối nghĩa quá ah
    Code:
    public SqlConnection connect()
            {
                String strCon;
                strCon = "server=.;database=QLSanPham;uid=usQLSP;pwd=product;";
                
                con = new SqlConnection(strCon);
                con.Open();
                return con;
            }
    Nên sửa lại thế này
    Code:
    public SqlConnection connect()
            {
                String strCon = "server=.;database=QLSanPham;uid=usQLSP;pwd=product;";
                
               SqlConnection _con = new SqlConnection(strCon);
                return _con;
            }
    Connection khi nào bạn cần mới nên mở,ko nên mở lung tung thế kia.Mà mở xong rồi thì cần đóng lại.Mình đoán là nó báo lỗi connection đang mở,ko đc mở nữa.
    Is the moon rising...

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

    mình đã thử bỏ dòng con.Open() rồi nhưng vẫn bị lỗi.

    Ko phải báo lỗi đối tượng Connection, mà nó báo lỗi ConnectionString chưa được khởi tạo.

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