30/09/2018, 17:50

VB.NET không gọi được hàm khi click vào button

Đoạn button thêm_click không thể gọi dt

Imports System.Data.SqlClient

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'start connect sql'
        Dim con As SqlConnection
        Dim str As String = "Data Source=(local);Initial Catalog=test;Integrated Security=True"
        con = New SqlConnection(str)
        con.Open()    'end'

        'Các thao tác với Sql'
        Dim command As New SqlCommand()
        Dim dt As New DataTable("KH")   'Tạo một đối tượng Datatable nhận dữ liệu trả về
        Dim da As New SqlDataAdapter()   'Tạo bộ máy DataAdapter thực hiện command
        command.Connection = con ' Kết nối
        command.CommandType = CommandType.Text  'loại lệnh sử dụng là Text hay là một query trong access
        command.CommandText = "Select * From KH"
        da.SelectCommand = command ' gán command cho da
        da.Fill(dt)  'Nạp dữ liệu vào Table
        GridControl1.DataSource = dt 'Load dữ liệu lên DataGridview  ------end

        'Lấy dữ liệu từ table vào txt
        txtmakh.DataBindings.Add("Text", dt, "Mã KH") ' Ở đây ta cần binding textbox txtmakh với giá trị Text ở cột STT của Table
        txtho.DataBindings.Add("Text", dt, "Họ KH")
        txtten.DataBindings.Add("Text", dt, "Tên KH")
        txtsdt.DataBindings.Add("Text", dt, "SĐT")
        txtdiachi.DataBindings.Add("Text", dt, "Địa Chỉ")
    End Sub



    Private Sub btnthem_Click(sender As Object, e As EventArgs) Handles btnthem.Click
        Dim row As DataRow = dt.NewRow()
        row("Mã KH") = txtmakh.Text
        row("Họ KH") = txtho.Text
        row("Tên KH") = txtten.Text
        row("SĐT") = txtsdt.Text
        row("Địa Chỉ") = txtdiachi.Text
        dt.Rows.Add(row)
        GridControl1.DataSource = dt
        Dim commandInsert As New SqlCommand()
        commandInsert.Connection = con
        commandInsert.CommandType = CommandType.Text
        commandInsert.CommandText = "Insert Into KH Values (@Mã KH,@Họ KH,@Tên KH,@SĐT,@Địa Chỉ)"
        commandInsert.Parameters.Add("@Mã KH", SqlDbType.Int, "Mã KH")
        commandInsert.Parameters.Add("@Tên KH", SqlDbType.NVarChar, "Tên KH")
        commandInsert.Parameters.Add("@Họ KH", SqlDbType.NVarChar, "Họ KH")
        commandInsert.Parameters.Add("@SĐT", SqlDbType.NVarChar, "SĐT")
        commandInsert.Parameters.Add("@Địa Chỉ", SqlDbType.NVarChar, "Địa Chỉ")
        da.InsertCommand = commandInsert
        da.Update(dt)
    End Sub

    Private Sub btnxoa_Click(sender As Object, e As EventArgs) Handles btnxoa.Click

    End Sub
End Class
Khiem Nguyen viết 20:01 ngày 30/09/2018

có hiện thỉ thông báo lỗi gì không bạn ?

Phát Nguyên viết 19:54 ngày 30/09/2018

Mình làm được rồi sẵn chia sẽ cho các bạn muốn tìm hiểu luôn, đem các hàm sau ra ngoài viết phia trên Form_Load, đây là chương trình quản lý, quản lý gì cũng được, kết nối tới CSDL

Dim con As SqlConnection
Dim dt As New DataTable()
Dim da As New SqlDataAdapter()

Khánh Hưng Nguyễn viết 20:05 ngày 30/09/2018

Em nên suy nghĩ về 3 lớp nhé. Code như thế này chưa ổn lắm đâu.

Đầu tiên là module kết nối, không sao, em làm cách này tốt.

Thứ 2 là lớp Business Logic Layer em nên suy nghĩ thêm về đối tượng.

  1. Tạo lớp đối tượng
    Cách 1:
    Bảng KH chính là một class
    Public Class KHClass
    Private _MaKH As String
    'Tạo thuộc tính mã KH thuộc bảng KH
    Public Property MaKH() As String
    Get
    Return _MaKH
    End Get
    Set(ByVal value As String)
    _MaKH = value
    End Set
    End Property

    End Plass
    Cách 2 : Bảng KH là 1 structure (1 class thu nhỏ)
    Public structure KHStruct
    public MaKH as string
    End structure

  2. Tạo hàm cho đối tượng (sự kiện, nếu có).

Ví dụ: Hàm insert vào CSDL
Public KH_Insert(_KH as KH) as boolean
Dim cmd as new sqlcommand
Dim SQL as string
KH_Insert = false
try
’ Xây dựng hàm clear CSDL trước
’ Tức có thể có những column not null thì mặc định giá trị space (Chuối) hoặc giá trị 0 (Số)
’ Nên xây dựng hàm xem để coi thử giá trị Mã KH đã tạo hay chưa. Nếu tạo rồi thì chuyển sang update chứ không ‘insert … – có rất nhiều trường hợp. Anh chỉ ví dụ để em tư duy hệ thống
SQL = “Insert into … value as”
SQl = SQl + "(’"+KH.MaKH+"’,…)

cmd = new sqlcommand(SQL,cn)
cmd.ExecuteNonQuery() ’ ở đây ngắn gọn, em có thể xây dựng commit or rollback nếu sai trong quá trình làm
KH_Insert = True
Catch ex as Exception

End try
End Public

  1. Sử dụng gắn với sự kiện của control …
    Sẽ nói sau nếu em hiểu ý anh.

P/s: Code anh gõ tay, em check syntax nhé.

Phát Nguyên viết 20:02 ngày 30/09/2018

Cám ơn anh, hiện tại e chưa có khả năng viết 3 lớp, anh có nguồn tài liệu vb.net nào không cho e xin tham khảo với

Phát Nguyên viết 19:56 ngày 30/09/2018

Hiện tại mình cần tìm dữ liệu trên gridview thông qua textbox, bạn hd dùm mình đc không, xin cám ơn nhiều

Khánh Hưng Nguyễn viết 19:57 ngày 30/09/2018

Mình viết dự án nhiều ( 1 vài dự án ERP lớn) nên mình chính là nguồn tài liệu về VB.NET.
Bạn có thời gian thì có thể gặp mình chủ nhật tại Tân Phú.
Mình sẽ hướng dẫn cho bạn cũng như chia sẻ kinh nghiệm.

Phát Nguyên viết 20:01 ngày 30/09/2018

Mình cũng ở Tân Phú, đường Nguyễn Văn Yến, không biết bạn ở đâu, mình mới chập chững code những ngày đầu thôi, còn kém lắm, đi làm rồi mà còn vậy đó, sếp cho thời gian trao dồi thêm

Bài liên quan
0