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!
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:
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.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; }
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.
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!
đú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!
Mình cũng đã thử kiểu thế này nhưng vẫn báo lỗi y chang:
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?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; } }
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.
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!
bạn cho mình xem cách của bạn được chứ!
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!
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!
Đoạn code này tối nghĩa quá ah
Nên sửa lại thế nàyCode:public SqlConnection connect() { String strCon; strCon = "server=.;database=QLSanPham;uid=usQLSP;pwd=product;"; con = new SqlConnection(strCon); con.Open(); 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.Code:public SqlConnection connect() { String strCon = "server=.;database=QLSanPham;uid=usQLSP;pwd=product;"; SqlConnection _con = new SqlConnection(strCon); return _con; }
Is the moon rising...
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.