Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Các bài viết hướng dẫn về Visual Basic .NET và C#

Moderators: tungcan5diop, QUANITGROBEST

Post Reply
User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by vuathongtin »

Tên bài viết: Căn Bản Về Kết Nối CSDL Access trong VB.Net
Tác giả: vuathongtin
Cấp độ bài viết: Cơ Bản
Tóm tắt:



Các khái nhiệm :

Datatable : giống như table trong file access, mọi thao tác (thêm, xóa, sửa,.. ) được thực hiện trên datatable rùi mới đưa vào file nguồn ---> datatable là bảng (table) dữ liệu trung gian.
Datatable gồm : datarow, dataset,....
Dữ liệu từ table của file nguồn được kết nối bởi Connection, sau đó đc đổ vào datatable (hoặc các thành phần trong datatable) thông qua DataAdapter.

Lấy ví dụ cho dễ hiểu nha :
Bạn chỉ cần tưởng tượng rằng : bạn có một cái bể nước (DataSource) , một cái máy bơm (DataAdapter) và một cái thùng đựng nước (DataSet). Thì khi lấy nước dùng cái bơm lấy nước từ bể, kiểm tra và lọc nước sau đó lại dùng cái bơm hút lại về cái bể nước. Đó chính là vai trò của cái bơm và DataAdapter tương tự như vậy.


--> Mình chỉ ghi theo những j mình hiểu thôi nên cũng ko chính xác lắm.

CSDL làm ví dụ : http://www.mediafire.com/?ntn0rmtmzdt

1. Khai báo
Namespace chỉ để kết nối Access
  1. Imports System.Data.OleDb

hoặc
  1. Imports System.Data


Biến toàn cục :
  1.    Dim con As New OleDbConnection
  2.     Dim da As New OleDbDataAdapter
  3.     Dim dt As New DataTable


2. Kết nối với CSDL :
  1. Sub ketnoi()
  2.         con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "  data source= " & Application.StartupPath & "\QUAN_LY_SINH_VIEN.mdb"
  3.         con.Open()
  4.     End Sub


--> QUAN_LY_SINH_VIEN.mdb là CSDL cần kết nối
Chú ý : Bạn muốn biết Provider của CSDL bạn dùng là gì bạn nên vào trang http://www.connectionstrings.com/để tìm hiểu


3. Load dữ liệu vào datatable, datagridview,...
  1.  ketnoi()
  2. ' kiểm tra kết nối
  3.        If con.State = ConnectionState.Open Then  ' hoặc  con.State = 1
  4.             MsgBox("Thanh cong")
  5.         End If
  6.  da = New OleDbDataAdapter("Select * from SINHVIEN", con)
  7.  da.Fill(dt)
  8.  DataGridView1.DataSource = dt


4. Next, Previous, Last, First, Count
Cách 1 : Dùng "BindingContext "
  1. ' Next
  2. Me.BindingContext.Item(dt).Position = Me.BindingContext.Item(dt).Position + 1
  3.  
  4. ' Previous
  5. Me.BindingContext.Item(dt).Position = Me.BindingContext.Item(dt).Position - 1
  6.  
  7. ' Last
  8. Me.BindingContext.Item(dt).Position = Me.BindingContext.Item(dt).Count - 1
  9.  
  10. ' First
  11. C1  DataGridView1.CurrentCell = DataGridView1.Item("tên hàng", 0)
  12. ví dụ   DataGridView1.CurrentCell = DataGridView1.Item("MSSV", 0)
  13.  
  14. C2 Me.BindingContext.Item(dt).Position = 0
  15.  
  16. 'Trỏ đến vị trí mới nhập
  17.  
  18. DataGridView1.CurrentCell =DataGridView1.Item("Tên cột sẽ chọn trên dòng", "chỉ số dòng mới chèn vào")
  19.  
  20. Ví dụ  trỏ đến dòng thứ 20 của cột MSSV
  21. DataGridView1.CurrentCell = DataGridView1.Item("MSSV", 20)
  22.  
  23. ' Count
  24. lbl_tongso.Text = "Tổng số  " & Me.BindingContext.Item(dt).Count.tostring
  25. hoặc
  26. lbl_tongso.Text = "Tổng số  " & Me.dt.Rows.Count.tostring
  27. hoặc
  28. lbl_tongso.Text = "Tổng số  " & Me.dt.DefaultView.Count.tostring
  29.  

Chú ý : dt là khai báo của datatable

Cách 2 : Dùng "Bindingsource"
ví dụ : Khi viết code cho button " Next"
  1.    Dim binding As New BindingSource
  2.         binding.DataSource = dt
  3.         DataGridView1.DataSource = binding
  4.         binding.MoveNext()


--> Ý nghĩa : BindingSoure cung cấp các giao thức "MoveNext, MoveFirst,.." , ta chỉ việc khai báo datasource của DataGridView1 gián tiếp với dt thông qua Bindingsource là sử dụng đc các giao thức đó

Những cái kia viết tương tự .....

5. Tìm kiếm
Cách 1 : Dùng SQL " Lọc với điều kiện cho trước"
Cú pháp :

Code: Select all

Select <tên field> from <tên table> where <điều kiện>

5.1.1. Dùng phép so sánh =
  1. da = New OleDbDataAdapter("Select * from SINHVIEN where MSSV='" & txt_tim.Text & "'", con)
  2. da.Fill(dt)
  3. DataGridView1.DataSource = dt


5.1.2. Dùng Hàm Instr

  1. da = New OleDbDataAdapter("Select * from SINHVIEN where instr(MSSV,'" & txt_tim.Text & "')>0", con)


Hàm InStr() trả về vị trí của ký tự (nhóm ký tự) đầu tiên được truyền vào trong chuối String.


Ví dụ :
InStr(doan_van,"T")
' Ở đây, chữ "T" được tính là chữ "T" của chữ: "Tro".


5.1.3. Dùng toán tử LIKE
Cú pháp :

Code: Select all

 "Select * from CV where NOIDUNG LIKE '%" & txtTimKiem.Text & "%'"


  1. da = New OleDbDataAdapter("Select * from SINHVIEN where MSSV like '" & txt_tim.Text & "'", con)


Cách 2 : Dùng chức năng "RowFilter" trong datatable
Cú pháp :
  1. dt.DefaultView.RowFilter= chuoiloc ' dt là khai báo của datatable


Ví dụ :
  1. dim chuoiloc as string= string.format ("Ten like '{0}%'",txt_timten.text)
  2.    dt.DefaultView.RowFilter= chuoiloc


Ngoài ra nếu datagridview được kết nối qua một bindingsource thì có thể phương thức "Filter" của BindingSource .
Ví dụ :
  1.   Dim binding As New BindingSource
  2.   binding.DataSource = dt
  3.   DataGridView1.DataSource = binding
  4.  binding.Filter = String.Format("Ten like '{0}%'", txtsearchstr.Text)


6. Thêm
Lấy form tạo người dùng làm ví dụ
tbl_nguoidung : nguoidung, matkhau

6.1. Phương pháp 1 : Chậm mà chắc

B1 : Kiểm tra kết nối và đổ (fill) dữ liệu từ nguồn vào datatable ---> Ta đã có 1 table ( bước này có khi ko dùng đến)

B2 : Khai báo 1 Row (dòng) mới vào dt (datatable), và add dữ liệu vào Row theo cấu trúc row trong (datatable)

  1.  ' Khai báo row mới
  2. Dim row As DataRow = dt.NewRow
  3.  ' Add du lieu vao cau truc Row
  4. row("nguoidung") = txt_tennguoidung.Text
  5. row("matkhau") = txt_matkhau.Text
  6. dt.Rows.Add(row)


B3 : Dùng Command để update vào file nguồn
  1. ' Dung command de update vao database nguon
  2.  Dim commandtao As New OleDb.OleDbCommand()
  3. commandtao.Connection = frm_dangnhap.con
  4. commandtao.CommandType = CommandType.Text ' Loại lenh su dung la Text
  5. commandtao.CommandText = "Insert into tbl_nguoidung values (@nguoidung,@matkhau)"
  6.  
  7. ' Truyen tham so vao cac values
  8. commandtao.Parameters.Add("@nguoidung", OleDb.OleDbType.VarChar, 30, "nguoidung")
  9. commandtao.Parameters.Add("@matkhau", OleDb.OleDbType.VarChar, 20, "matkhau")
  10.  
  11. ' Dùng da để thực thi những thay đổi vào file nguồn
  12. da.InsertCommand = commandtao
  13. da.Update(dt)


6.2 . Phương pháp 2 : Nhanh cho mau thấy, không cần biết hậu quả :P

B1, B2 : tương tự phương pháp 1
B3 : Dùng CommandBuilder để làm da thực thi nhưng thay đổi vào file nguồn

  1. Dim cb As OleDbCommandBuilder
  2. cb = New OleDbCommandBuilder(da)
  3. da.Update(dt)
  4. cb.Dispose()


Ngoài ra có thể Insert dựa vào
dataset

7. Sửa :
B1 : Tương tự như Thêm
B2 : Khai báo
  1. Dim cb As New OleDb.OleDbCommandBuilder
  2. Dim row As DataRow = frm_dangnhap.dt_nguoidung.Select("nguoidung = '" & frm_dangnhap.txt_nguoidung.Text & "'")(0)
  3. row.BeginEdit()
  4. row("matkhau") = txt_matkhaumoi.Text
  5. row.EndEdit()


B3 : Tương tự B3 của 6.2
  1. Dim cb As OleDbCommandBuilder
  2. cb = New OleDbCommandBuilder(da)
  3. da.Update(dt)
  4. cb.Dispose()


Ngoài ra B2 có thể làm tương tự như B2 của 6.1 (chậm mà chắc)
  1. ' Dung command de update vao database nguon
  2.  Dim commandtao As New OleDb.OleDbCommand()
  3. commandtao.Connection = frm_dangnhap.con
  4. commandtao.CommandType = CommandType.Text ' Loại lenh su dung la Text
  5. commandtao.CommandText = "Update tbl_nguoidung set nguoidung=@nguoidung,matkhau=@matkhau"
  6.  
  7. ' Truyen tham so vao cac values
  8. commandtao.Parameters.Add("@nguoidung", OleDb.OleDbType.VarChar, 30, "nguoidung")
  9. commandtao.Parameters.Add("@matkhau", OleDb.OleDbType.VarChar, 20, "matkhau")
  10.  
  11. ' Dùng da để thực thi những thay đổi vào file nguồn
  12. da.UpdateCommand = commandtao
  13. da.Update(dt)

Giải thích :
  1. frm_dangnhap.dt_nguoidung.Select("nguoidung = '" & frm_dangnhap.txt_nguoidung.Text & "'")(0)
--> lấy bảng đầu tiên trong tập hợp các bảng của datatable

8. Xóa :
B1 : Tương tự như Thêm
B2 :
  1. Dim cb As New OleDb.OleDbCommandBuilder
  2. Dim row As DataRow = frm_dangnhap.dt_nguoidung.Select("nguoidung = '" & frm_dangnhap.txt_nguoidung.Text & "'")(0)
  3. row.BeginEdit()
  4. row.delete()
  5. row.EndEdit()


B3 : Tương tự B3 của 6.2
  1. Dim cb As OleDbCommandBuilder
  2. cb = New OleDbCommandBuilder(da)
  3. da.Update(dt)
  4. cb.Dispose()


Cách 2 : Thực thi trực tiếp câu lệnh SQL
  1.  Dim row As DataRow = dt.Select("nguoidung = '" & Txt_nguoidung.Text & "'")(0)
  2.  cmd = New OleDbCommand("Delete * from tbl_nguoidung where (nguoidung='" & txt_nguoidung.Text & "')", con)
  3. cmd.ExecuteNonQuery()
  4. row.delete()


Chỉ cần viết 1 thủ tục Thực thi trực tiếp command thông qua lệnh ExecuteNonQuery()
ta có thể insert, update hoặc delete 1 cách dễ dàng . 1 thủ tục làm nhiều công việc

  1. Sub thucthi(ByVal chuoitruyvan As String, ByRef con As OleDbConnection)
  2.             cmd = New OleDbCommand(chuoitruyvan, con)
  3.             cmd.ExecuteNonQuery()
  4.   End Sub


Chú thích :
- con là biến toàn cục ( đã khai báo ở trên)
- Chuoitruyvan là lệnh SQL

Ví dụ :
  1. Dim chuoitruyvan1 as string="Insert into NhanVien(MaNV,Ho,Ten) values('" & txt_ma.Text & "','" & txt_ho.Text & "','" & txt_ten.Text & "')"
  2. Dim chuoitruyvan2 As String = "update NhanVien set MaNV='" & txt_ma.Text & "',Ho='" & txt_ho.Text & "',Ten='" & txt_ten.Text & "' where MaNV='" & txt_ma.Text & "'"
  3. Dim chuoitruyvan3 as string="delete * from NhanVien where MaNV='" & txt_ma.Text & "'"
  4.  
  5. them(chuoitruyvan1,con) ' Thêm dữ liệu
  6. them(chuoitruyvan2,con) ' Update lại dữ liệu
  7. them(chuoitruyvan3,con) ' Xóa dữ liệu tại vị trí mã được chọn


Tóm lại : theo cách hiểu hiện tại của mình:
Để thao tác với CSDL trong ADO.Net có 4 cách
1- Dùng command để thực thi tham số truyền vào
ví dụ :

Code: Select all

 da.insertcommand=cmd

2- Dùng commandBuider để chấp nhận những thay đổi trong datatable
VD: Dim OleDbcommandbuider = new OleDbCommandbuilder(da)
3- Dùng câu lệnh thực thi ExenonQuery hoăc ExeReader

Code: Select all

 VD: cmd.ExeNonQuery

4- Dùng Store procedure


9. Tạo Báo Cáo (Crytal Report ):
Bạn có thể tham khảo 3 bài viết sau :
1. bài viết TẠO REPORT TRONG 1h của tungcan5diop http://caulacbovb.com/forum/viewtopic.php?f=8&t=5727&start=20

2. Tìm hiểu và thao tác với Crystal Report của anhtuyenbk http://caulacbovb.com/forum/viewtopic.php?f=23&t=562

3. Dynamic Crystal Report của thuytrang2542000 http://caulacbovb.com/forum/viewtopic.php?f=23&t=5357#p33693

===> Tóm lại để làm Report chỉ cần 2 bước cơ bản sau :
Bước 1: (Tạo thư mục baocao chứa 3 cái sau đây)
- Tạo Dataset --> ds_baocao
- Crytal Report theo cấu trúc của dataset (field của dataset tương ứng với field trong file nguồn) ----> rpt_baocao
- Form hiển thị báo cáo (chứa control CrytalReportView) --> frm_baocao

Bước 2 : Viết thủ tục inbaocao
Nạp dữ liệu cho Crytal Report theo datatable
  1. Dim myreport As New rpt_baocao
  2.   myreport.SetDataSource(dt_nhanvien)


Nạp form trong report
  1.  Dim f As New  frm_report
  2.  f.CrystalReportViewer1.ReportSource = myreport
  3.  f.Show()


Bổ Sung : (Cập nhật ngày 11-08-2010)

1. Cập nhật những thay đổi trong lưới vào CSDL
  1.     Sub capnhatthaydoi()
  2.                    cb = New OleDbCommandBuilder(da)
  3.                    da.Update(dt)
  4.                    dt.AcceptChanges()
  5.               End Sub


2. Lấy dữ liệu từ DataGridview thông qua các sự kiện (Event):
Form có 1 datagrid, trong datagrid có 3 cột là Id, Ten, Dt . Khi mình bấm vào 1 dòng nào đó trên datagrid thì các textbox sẽ hiển thị nội dung tương ứng của dòng đc click


Cách 1 :
Ở sự kiện RowHeaderMouseClick trong DataGridView:
  1. textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
  2. textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
  3. textBox3.Text = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();


Cách 2 :
Sự kiện CurrentCellChanged
  1. On Error Resume Next
  2.  i = DataGridView1.CurrentRow.Index() 'i =  BindingContext.Item(dt).Position
  3.         txt_diachi1.Text = DataGridView1.Item("Diachi1",i).Value

hoặc :
  1. txt_diachi1.Text = DataGridView1.CurrentRow.Cells("Diachi1").Value().ToString


Cách 3 : (nên dùng cách này)
Hoặc dùng sự kiện SelectionChanged
  1.  i = DataGridView1.CurrentRow.Index() 'i =  BindingContext.Item(dt).Position
  2.         txt_diachi1.Text = DataGridView1.Item("Diachi1",i).Value

hoặc :
  1.  txt_diachi1.Text = DataGridView1.CurrentRow.Cells("Diachi1").Value().ToString


3. Bắt lỗi trong SQL:

bắt lỗi cú pháp cho dữ liệu nhé. Thường thì nó hay bị lỗi đấu nhấy đơn (" ' ") đó.

  1. Function ThayThe(ByVal Chuoi As String, Optional ByVal KiTuCu As String = "'", Optional KiTuMoi ByValAs String = "''") As String
  2.   Return Chuoi.Replace(KiTuCu, KiTuMoi)
  3. End Function

sử dụng :
  1. sql = "Insert Into NhanVien (MaNV, Ho, Ten) Values ('" & ThayThe(Me.txtMa.Text.Trim) & "', '" & ThayThe(Me.txtHo.Text.Trim) & "', '" & ThayThe(Me.txtTen.Text.Trim) & "')"


Xem project demo về report : http://caulacbovb.com/forum/download/file.php?id=9840
Last edited by vuathongtin on Mon 02/05/2011 9:25 am, edited 12 times in total.
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online
khicon_9x
Posts: 3
Joined: Fri 23/10/2009 10:53 am

Re: Căn Bản Về Kết Nối CSDL

Post by khicon_9x »

Rất cảm ơn bài viết của bạn. Bài viết rất hay và bổ ích !!!. Thankyou!!!
qqqq1234
Thành viên chính thức
Thành viên chính thức
Posts: 10
Joined: Sun 17/04/2011 9:05 pm

Re: Căn Bản Về Kết Nối CSDL

Post by qqqq1234 »

thank về bài viết
luckystar909
Posts: 1
Joined: Tue 05/07/2011 2:31 pm

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by luckystar909 »

Cảm ơn bạn đã chia sẻ.
muaphonui_2010
Thành viên ưu tú
Thành viên ưu tú
Posts: 551
Joined: Fri 26/11/2010 1:15 pm
Location: TP.HCM
Has thanked: 190 times
Been thanked: 36 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by muaphonui_2010 »

Bài này thật bổ ích, chi tiết như vậy thật dễ học. Xin cảm ơn.
Bạn Vuathongtin có thể viết thêm cách tạo Sup/Form (giống như sup/form trong access đó ).
VD : ta có 2 tables : tbhoadon ; và tbhoadonchitiet , có quan hệ "1- nhiều" qua trường "txtSoHoaDon"
- tbhoadon gồm các trường : txtSoHoaDon, cbMaKhach, txtDiaChi, txtMaSoThue, ....
- tbhoadonchitiet gồm các trường : txtSoHoaDon, cbMaHang, txtSoLuong, txtDonGia, txtThanhTien.....
Vậy ta tạo Form và các chức năng thêm mới, lưu, xoá.... như thế nào?
Mong được giúp đở chi tiết, xin chân thành cảm ơn.
boy1234
Guru
Guru
Posts: 448
Joined: Mon 13/10/2008 3:12 pm
Location: Dĩ An - Bình Dương
Been thanked: 32 times

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by boy1234 »

muaphonui_2010 wrote:Bài này thật bổ ích, chi tiết như vậy thật dễ học. Xin cảm ơn.
Bạn Vuathongtin có thể viết thêm cách tạo Sup/Form (giống như sup/form trong access đó ).
VD : ta có 2 tables : tbhoadon ; và tbhoadonchitiet , có quan hệ "1- nhiều" qua trường "txtSoHoaDon"
- tbhoadon gồm các trường : txtSoHoaDon, cbMaKhach, txtDiaChi, txtMaSoThue, ....
- tbhoadonchitiet gồm các trường : txtSoHoaDon, cbMaHang, txtSoLuong, txtDonGia, txtThanhTien.....
Vậy ta tạo Form và các chức năng thêm mới, lưu, xoá.... như thế nào?
Mong được giúp đở chi tiết, xin chân thành cảm ơn.

Hình như trong VB.Net không có kiểu Main/SubForm như trong Access. :D
Dạo này nghiện honda SS50
User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by vuathongtin »

Vấn đề này bạn thử nghiên cứu về:
+ "thiết lập DataRelation cho 2 datatable"
+ Thực hiện tạo table bằng trình kéo thả Wizard, cái DataSource Wizard j đó (cái đó mình ít dùng nên ko rành )
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online
User avatar
chipchip
Thành viên chính thức
Thành viên chính thức
Posts: 17
Joined: Fri 15/08/2008 8:25 am

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by chipchip »

Bài viết rất hay dễ hiểu, cảm ơn bạn vuathongtin :)
domfootwear
Thành viên chính thức
Thành viên chính thức
Posts: 34
Joined: Tue 22/06/2010 2:24 pm
Has thanked: 26 times

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by domfootwear »

Anh chị cho em hỏi code để gán datasource vào report

Ví dụ code fill data vào datagrid như sau:

Code: Select all

 da = New OleDbDataAdapter("Select tendangnhap as [Tên Đăng Nhập], matkhau as [Mật Khẩu] from DANGNHAP", con)
        dt.Clear()
        da.Fill(dt)
        DataGridView1.DataSource = dt
Nhưng gán vào report như thế nào ạ, em đang học VB.NET 2012
Xin chân thành cảm ơn
User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by vuathongtin »

  1. da = New OleDbDataAdapter("Select tendangnhap as [Tên Đăng Nhập], matkhau as [Mật Khẩu] from DANGNHAP", con)
  2. dt.Clear()
  3. da.Fill(dt)
  4. IF dt.Rows.Count>0 THEN
  5. Dim myreport As New rpt_baocao
  6.   myreport.SetDataSource(dt)
  7. Dim f As New  frm_report
  8.  f.CrystalReportViewer1.ReportSource = myreport
  9.  f.Show()
  10. END IF
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online
domfootwear
Thành viên chính thức
Thành viên chính thức
Posts: 34
Joined: Tue 22/06/2010 2:24 pm
Has thanked: 26 times

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by domfootwear »

Xin cảm ơn bạn. Cho mình hỏi phần khai báo biến bên dưới mình thay thế như thế nào cho hợp lý.
Dim myreport As New rpt_baocao

Dim f As New frm_report
Xin chân thành cảm ơn.
Xin lỗi vì mình mới mò mẵm cái này được 3 ngày nên có phần hỏi hơi ngu ngơ, bạn thông cảm nhé.
domfootwear
Thành viên chính thức
Thành viên chính thức
Posts: 34
Joined: Tue 22/06/2010 2:24 pm
Has thanked: 26 times

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by domfootwear »

vuathongtin wrote:
  1. da = New OleDbDataAdapter("Select tendangnhap as [Tên Đăng Nhập], matkhau as [Mật Khẩu] from DANGNHAP", con)
  2. dt.Clear()
  3. da.Fill(dt)
  4. IF dt.Rows.Count>0 THEN
  5. Dim myreport As New rpt_baocao
  6.   myreport.SetDataSource(dt)
  7. Dim f As New  frm_report
  8.  f.CrystalReportViewer1.ReportSource = myreport
  9.  f.Show()
  10. END IF
Mình không có dùng CrystalReport mà dùng ReportViewer ở VB.Net 2012. Mong bạn hướng dẫn giúp.
Xin cảm ơn.
thkd09
Thành viên chính thức
Thành viên chính thức
Posts: 15
Joined: Sat 29/08/2009 10:27 pm
Has thanked: 14 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by thkd09 »

Các bác cho em hỏi tý. Em làm như bài hướng dẫn. Lúc chạy chương trình thấy add data ngon lành, nhưng khi thoát chương trình và chạy lại thì không thấy dữ liệu mình add lúc nãy đâu?
User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by vuathongtin »

Em xem lại đường dẫn đến data, nếu nó trỏ đến data nằm trong Bin thì mới chính xác. Em liên hệ qua nick yahoo: vuathongtin để a chỉnh lại cho.
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online
thkd09
Thành viên chính thức
Thành viên chính thức
Posts: 15
Joined: Sat 29/08/2009 10:27 pm
Has thanked: 14 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by thkd09 »

@vuathongtin: Bác cho em hỏi cái Application.StartupPath là nó chỉ vào đâu. Lúc đầu em dùng cái này thì bị lỗi như đó, sau khi em đọc bài trả lời của bác em sửa lại đường dẫn cụ thể vào bin\debug thì ok.
User avatar
xuanha
Guru
Guru
Posts: 1230
Joined: Thu 19/08/2010 4:25 pm
Location: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 times
Been thanked: 374 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by xuanha »

thkd09 wrote:@vuathongtin: Bác cho em hỏi cái Application.StartupPath là nó chỉ vào đâu. Lúc đầu em dùng cái này thì bị lỗi như đó, sau khi em đọc bài trả lời của bác em sửa lại đường dẫn cụ thể vào bin\debug thì ok.
Application.StartupPath chính là lấy đường dẫn chứa ứng dụng của bạn. Khi bạn đang làm chương trình thi nó sẽ chỉ vào ...\bin\debug
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599
User avatar
vuathongtin
Điều hành viên
Điều hành viên
Posts: 1028
Joined: Sun 02/05/2010 10:03 pm
Location: Xứ sở DG
Has thanked: 2 times
Been thanked: 105 times
Contact:

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by vuathongtin »

Application.StartupPath : nói nôm na là chỉ thẳng đến vị trí file EXE (..\bin\debug) sau khi build project
Bùi Thành Nhân
* Chuyên gia MMO
congtacvien.online
User avatar
deptraithongminh
Thành viên tích cực
Thành viên tích cực
Posts: 143
Joined: Tue 02/07/2013 4:58 pm
Location: TPHCM
Has thanked: 17 times
Been thanked: 1 time

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by deptraithongminh »

sao mình làm đoạn code này để load CSDL vào DataGridView ko được ?

Code: Select all

Dim con As New OleDbConnection
    Dim da As New OleDbDataAdapter
    Dim dt As New DataTable
Sub KetNoi()
        con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\C:\Users\Martin\Desktop\CongViec\MayTinhHoaHoc\Data\HoaHoc.accdb;Persist Security Info=False;" & Application.StartupPath & "C:\Users\Martin\Desktop\CongViec\MayTinhHoaHoc\MayTinhHoaHoc\bin\Debug\MayTinhHoaHoc.exe"
        con.Open()
        'KiemTraKetNoi
        If con.State = ConnectionState.Connecting Then
            StatusKQ.Text = "Đang kết nối ..."
        ElseIf con.State = ConnectionState.Broken Then
            StatusKQ.Text = "Không thể kết nối đến CSDL"
        ElseIf con.State = ConnectionState.Open Then
            StatusKQ.Text = "Kết nối thành công đến CSDL"
        End If
        da = New OleDbDataAdapter("Select * from ChatHoaHoc", con)
        da.Fill(dt)
        DataGridView1.DataSource = dt
end sub
User avatar
deptraithongminh
Thành viên tích cực
Thành viên tích cực
Posts: 143
Joined: Tue 02/07/2013 4:58 pm
Location: TPHCM
Has thanked: 17 times
Been thanked: 1 time

Re: Căn Bản Về Kết Nối CSDL trong VB.NET bằng ADO.NET

Post by deptraithongminh »

bạn vuathongtin ơi sao mình làm delete như bạn mà lúc delete nó báo lỗi tại dòng "da.Update(dt)" ?
sửa giúp mình với
Post Reply

Return to “[.NET] Bài viết hướng dẫn”