การค้นหาข้อมูลในฐานข้อมูล VB.NET & ADO.NET เอกสารสำหรับ การเรียนใน สัปดาห์ที่ 8 การค้นหาข้อมูลในฐานข้อมูล VB.NET & ADO.NET โดย อ. นัฐพงศ์ ส่งเนียม xnattapong@hotmail.com http://www.siam2dev.com
หน้าจอข้อมูลพนักงาน
การค้นหาข้อมูลในฐานข้อมูล โดยทั่วไป การค้นหาข้อมูลนั้นสามารถทำได้ 2 วิธีใหญ่ คือ การค้นหาโดยแบบลำดับ (sequential) การค้นหาโดยใช้ คำสั่ง SQL
การค้นหาแบบ sequential เป็นการค้นหาจาก DataSet โดยการค้นเรียงไปตั้งแต่แถวแรก
เขียนโค้ดสำหรับ เรียก Namespace System.Data เข้ามาใช้งาน
กำหนดตัวแปรเริ่มต้น ไว้ใต้บรรทัด Windows Form Designer generated code Dim CN As OleDbConnection Dim DA As OleDbDataAdapter Dim DS As New DataSet Dim i As Int16 = 0 Dim status As String
สร้างโปรแกรมย่อยในการเชื่อมต่อกับฐานข้อมูล Public Sub OpenDB() Try CN = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\Payroll2007\Payroll2007.MDB") Dim SQL As String CN.Open() SQL = "Select * From TblEmployee" DA = New OleDbDataAdapter(SQL, CN) DA.Fill(DS, "TblEmployee") Catch ex As Exception MsgBox(ex.Message) End Try End Sub
สร้างโปรแกรมย่อยในการเชื่อมต่อกับฐานข้อมูล Public Sub OpenDB() Try CN = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\Payroll2007\Payroll2007.MDB") Dim SQL As String CN.Open() SQL = "Select * From TblEmployee WHERE ID=‘003’" DA = New OleDbDataAdapter(SQL, CN) DA.Fill(DS, "TblEmployee") Catch ex As Exception MsgBox(ex.Message) End Try End Sub
สร้างโปรแกรมย่อยในการเชื่อมต่อกับฐานข้อมูล Public Sub OpenDB() Try CN = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\Payroll2007\Payroll2007.MDB") Dim SQL As String CN.Open() SQL = "Select * From TblEmployee WHERE FNAME=‘PETER’" DA = New OleDbDataAdapter(SQL, CN) DA.Fill(DS, "TblEmployee") Catch ex As Exception MsgBox(ex.Message) End Try End Sub
สร้างโปรแกรมย่อยในการเชื่อมต่อกับฐานข้อมูล Public Sub OpenDB() Try CN = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\Payroll2007\Payroll2007.MDB") Dim SQL As String CN.Open() SQL = "Select * From TblEmployee WHERE FNAME= ‘" & TxtSearch.Text & “’” DA = New OleDbDataAdapter(SQL, CN) DA.Fill(DS, "TblEmployee") Catch ex As Exception MsgBox(ex.Message) End Try End Sub
สร้างโปรแกรมย่อยในการแสดงข้อมูลจากฐานข้อมูล Public Sub showData() Dim Gender As String Try TxtID.Text = DS.Tables("TblEmployee").Rows(i)("EmpID") TxtName.Text = DS.Tables(0).Rows(i)("FName") TxtLName.Text = DS.Tables("TblEmployee").Rows(i)("LName") Gender = DS.Tables("TblEmployee").Rows(i)("Gender") If Gender = "M" Then CmbGender.Text = "ชาย" Else CmbGender.Text = "หญิง" End If DTBOD.Value = DS.Tables("TblEmployee").Rows(i)("BOD") DTStartDate.Value = DS.Tables("TblEmployee").Rows(i)("StartDate") TxtAddress.Text = DS.Tables("TblEmployee").Rows(i)("Address") TxtMobile.Text = DS.Tables("TblEmployee").Rows(i)("Mobile") Catch ex As Exception MsgBox(ex.Message) End Try End Sub
โค้ดตอนฟอร์มโหลด Private Sub FrmTest01_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load OpenDB() showData() BtnSave.Enabled = False LockControls(True) End Sub
โค้ดในปุ่ม ค้นหา Search Private Sub BtnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnGO.Click Dim Found as Boolean Dim keysearch As String Found = False keysearch = TxtSearch.Text For k As Int16 = 0 To DS.Tables(0).Rows.Count - 1 If ucase(keysearch) = ucase(DS.Tables(0).Rows(k)("empid")) Then i = k showData() Found = True Exit For Else End If Next k If Found Then Msgbox(“ไม่พบข้อมูลที่คุณต้องการค้นหา”) End IF End Sub
การออกแบบหน้าจอ Login FrmLogin.vb การออกแบบหน้าจอ Login การออกแบบหน้าจอล็อกอินมีรายละเอียดดังนี้ LbUserName LbPassword TxtUserName TxtPassword BtnLogin BtnCanCel BtnExit
กำหนดคุณสมบัติของ ฟอร์ม FrmLogin Name : FrmLogin Formborderstyle : Fixeddialog MaximizeBox : False Backcolor : เลือกสีที่ต้องการ StartPosition : CenterScrenn Text : ล็อกอินเข้าสู่ระบบ HR
สร้างตาราง TblMember ใน MS-AccessXP id :: Autonumber >>Primary Key PK username :: เป็น Text ขนาด 16 password :: เป็น Text ขนาด 16 fullname :: เป็น Text ขนาด 50 type :: เป็น number ขนาด byte 0::admin 1::user 2::Guest e_mail :: เป็น Text ขนาด 50
ป้อนข้อมูลลงในตาราง TblMember
เขียนคำสั่งเพื่ออ้างอิงถึง Namespace สำหรับติดต่อฐานข้อมูล ดังนี้ Imports System.Data Imports System.Data.OleDb โดยให้ประกาศไว้ในบรรทัดแรกสุดของ source code
ต.ย.
ประกาศตัวแปรที่จำเป็นสำหรับการเชื่อมต่อฐานข้อมูล Dim CN As OleDbConnection Dim DA As OleDbDataAdapter Dim DS As New DataSet Dim F1 As New FrmTest01 โดยให้ประกาศไว้ในส่วนของ Global scope ในหน้าต่าง source code
Private Sub BtnLogin_Click(ByVal sender As System Private Sub BtnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLogin.Click Try Dim un As String = TxtUserName.Text Dim pwd As String = TxtPassword.Text CN = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\Payroll2007\Payroll2007.MDB") Dim SQL As String CN.Open() SQL = "Select * From TblMember Where UserName='" & un & "' and Password='" & pwd & "'" DA = New OleDbDataAdapter(SQL, CN) DA.Fill(DS, "TblMember") Dim rowcnt As Int16 rowcnt = DS.Tables(0).Rows.Count If rowcnt >= 1 Then F1.Show() Me.Hide() Else MsgBox("ไม่สามารถเข้าระบบได้ เนื่องจาก ชื่อผู้ใช้งานหรือ รหัสผ่านไม่ถูกต้อง") TxtUserName.Clear() TxtPassword.Clear() TxtUserName.Focus() End If Catch ex As Exception MsgBox(ex.Message) End Try End Sub โค้ดในปุ่ม Login
โค้ดในปุ่ม Cancel Private Sub BtnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCancel.Click TxtUserName.Clear() TxtPassword.Clear() TxtUserName.Focus() End Sub
โค้ดในปุ่ม Exit Private Sub BtnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExit.Click End End Sub
โค้ดตอน กด แป้น Enter บนคีย์บอร์ด ขณะอยู่ในช่อง Txtpassword Private Sub TxtPassword_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtPassword.KeyPress If e.KeyChar = Chr(13) Then BtnLogin_Click(sender, e) Else End If End Sub กดแป้น Enter บนคีย์บอร์ด ก็ทำการ Login อัตโนมัติ แทนการ คลิกที่ปุ่ม Login