Lập trình cơ sở dữ liệu - CĐ Nghề Công Nghiệp Hà Nội - 17

Dim lenhsql3 As String = "insert sanpham values " & _ "(6,'LCD Sony 32 inch', 'SONY',10900000)"

Dim cmd3 As New SqlClient.SqlCommand(lenhsql3, Ket_noi) Cmd3.ExecuteNonQuery()

Ket_noi.Close()

5.3.4 Parameter

a. Khai báo và sử dụng tham số

Trong CommandText có thể sử dụng các tham số để thay thế cho các giá trị chưa xác định và khi thực hiện sẽ dùng đối tượng Parameter để truyền giá trị vào chỗ các dấu hỏi. Tùy theo Command, Parameter sẽ khai báo từ lớp OledbParameter hay SqlParameter. Tại vị trí cần thay bằng tham số sẽ để dấu ? nếu là lớp OledbParameter và để @tên_biến_thamsố nếu là SqlParameter

Các cú pháp khai báo tham số:

Dim <tên parameter> As New loại_tham_số()

Trong đó loại_tham_số là OledbParameter hoặc SqlParameter

Hoặc

Dim <tên parameter> As New loại_tham_số(tên_ts)

Hoặc

Dim <tên parameter> As New loại_tham_số (tên_ts, giá trị)

Hoặc

Dim <tên parameter> As New loại_tham_số = biến_command.CreateParameter

Các thuộc tính của tham số


Tên

Mô tả

Direction

Giá trị cho biết loại tham số với các giá trị sau: (đọc ghi)

Input (mặc định): loại tham số đầu vào

InputOutput: loại tham số vào và ra

Output: loại tham số đầu ra

ReturnValue: loại tham số nhận giá trị trả về của một thủ tục nội, một hàm, hay một hàm do người dùng định nghĩa.

OleDbType SqlDbType

Kiểu dữ liệu OleDb hoặc SqlDb của tham số (đọc ghi)

ParameterName

Tên tham số (đọc ghi)

Value

Giá trị của tham số (đọc ghi)

Có thể bạn quan tâm!

Xem toàn bộ 201 trang tài liệu này.

Ví dụ 5.4: Sử dụng tham số trong command

Thiết kế form như hình dưới đây. Nút Thống kê kết nối đến cơ sở dữ liệu SQL De1 trên server HTC-VAIOHuyen và hiển thị số lần bán hàng trong textbox txtcount và tổng số tiền bán hàng của nhân viên trong textbox txtsum. Tên nhân viên (textbox1) được định nghĩa là tham số.

Tạo tham số với Command để hiển thị số lần bán hàng 39 tạo và mở connection 1

Tạo tham số với Command để hiển thị số lần bán hàng:


' tạo và mở connection Tao_ket_noi() Ket_noi.Open()

' hiển thị số lần bán hàng

Dim lenhsql as string = "select count(sohd) from banhang " & _ "where nguoiban=@nb"

Dim cmdcount As New SqlClient.SqlCommand(lenhsql,Ket_noi)

Dim thamsonb As SqlClient.SqlParameter = cmdcount.CreateParameter thamsonb.ParameterName = "@nb"

thamsonb.Value = TextBox1.Text cmdcount.Parameters.Add(thamsonb) txtcount.Text = cmdcount.ExecuteScalar()

' đóng kết nối Ket_noi.Close()

Ta có thể viết đoạn mã tương tự để hiển thị tổng số tiền bán hàng với tên nhân viên là tham số. Hoặc sử dụng cách viết như sau: (dùng chung tham số @nb cho đối tượng command có command text thay đổi theo câu lệnh SQL tương ứng).

' tạo và mở connection Tao_ket_noi() Ket_noi.Open()

' hiển thị số lần bán hàng

Dim cmd As New SqlClient.SqlCommand

cmd.CommandText = "select count(sohd) from banhang where " & _ "nguoiban=@nb"

cmd.Connection = Ket_noi

Dim thamsonb As SqlClient.SqlParameter = cmd.CreateParameter thamsonb.ParameterName = "@nb"

thamsonb.Value = TextBox1.Text

cmd.Parameters.Add(thamsonb) txtcount.Text = cmd.ExecuteScalar()

' hiển thị tổng số tiền bán hàng

cmd.CommandText = "select sum(thanhtien) from banhang where " & _ "nguoiban=@nb"

txtsum.Text = cmd.ExecuteScalar() ' đóng kết nối

Ket_noi.Close()


Khi sử dụng OLEDBCommand thì câu lệnh SQL thay đổi như sau:

lenh.CommandText = "Select sum(thanhtien) from banhang " & _ where nguoiban = ?"

Dim thamso As OleDbParameter = lenh.CreateParameter() thamso.Value = "An"

lenh.Parameters.Add(thamso)

b. Đưa tham số trực tiếp vào tập hợp Parameters

Có thể đưa nhiều tham số trực tiếp vào tập hợp Parameter. Mỗi tham số được đưa vào theo cú pháp như sau:


Dim tên_thamsố as Loại_thamsố = _ tên_command.CreateParameter(tên_thamsố, kiểu_dữ_liệu, kích_cỡ) Tên_thamsố.Value = giá_trị


Nếu là OLEDBParameter thì danh sách tham số đưa vào phải đúng theo thứ tự của danh sách tham số trong câu lệnh. Nếu là SQL thì không cần theo đúng thứ tự.


Ví dụ 5.5: Hiển thị số tiền bán hàng của một nhân viên trong một ngày nào đó:

Form được thiết kế như mẫu sau. Tên nhân viên được nhập vào hộp txtten; ngày bán nhập vào hộp txtngay, tổng tiền bán hàng được hiển thị trong txtsum.


Biến cố Click của nút Thống kê Tao ket noi Ket noi Open Dim cmd As New SqlClient 2

Biến cố Click của nút Thống kê

Tao_ket_noi() Ket_noi.Open()

Dim cmd As New SqlClient.SqlCommand

cmd.CommandText = "select sum(thanhtien) from banhang " & _ "where nguoiban=@nb and ngayban=@ngay"

cmd.Connection = Ket_noi

Dim thamsonb As SqlClient.SqlParameter = _ cmd.Parameters.Add("@nb", SqlDbType.NVarChar, 50) thamsonb.Value = txtten.Text

Dim thamsongay As SqlClient.SqlParameter = _ cmd.Parameters.Add("@ngay", SqlDbType.DateTime) thamsongay.Value = CDate(txtngay.Text)

txtsum.Text = cmd.ExecuteScalar()

Ket_noi.Close()

c. Truyền tham số

Ví dụ 5.6: Giả sử trong cơ sở dữ liệu De1, ta đã tạo một thủ tục nội tại trả về tổng số tiền bán được của một nhân viên. Thủ tục được tạo như sau:

create function ThongKeNV (@tnb nvarchar(50)) returns decimal

as begin

declare @tt decimal

select @tt= sum(thanhtien) from banhang where nguoiban=@tnb return (@tt)

end

Thủ tục có một tham số đầu vào là @tnb thuộc kiểu nvarchar(50) tương ứng với tên một nhân viên bán hàng và trả về giá trị thuộc kiểu decimal tương ứng với tổng số tiền bán được của nhân viên đó. Ta sẽ xây dựng chương trình sử dụng đối tượng command với 2 tham số được truyền vào (1 tham số trả về và một tham số đầu vào). Tham số trả về phải được truyền cho command trước tiên.

Form được thiết kế như hình dưới đây. Tên nhân viên được chọn trong combo box (cboten). Nút Thống kê dùng để gọi hàm thongkenv đã tạo trong SQL và hiển thị kết quả trong textbox txtsum.


Biến cố Click của nút Thống kê 39 hiển thị số lần bán hàng Tao ket noi Ket noi 3

Biến cố Click của nút Thống kê:

' hiển thị số lần bán hàng Tao_ket_noi() Ket_noi.Open()

' tạo command có tên cmd tương ứng với thủ tục thongkenv Dim cmd As New SqlClient.SqlCommand cmd.Connection = Ket_noi

cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "thongkenv"

' tạo tham số sotien là tham số trả về

Dim sotien As New SqlClient.SqlParameter sotien.Direction = ParameterDirection.ReturnValue

sotien.SqlDbType = SqlDbType.Decimal cmd.Parameters.Add(sotien)

' tạo tham số thamsonb là tham số đầu vào ứng với người bán Dim thamsonb As SqlClient.SqlParameter = _ cmd.Parameters.Add("@tnb", SqlDbType.NVarChar, 50)

' thiết lập giá trị cho thamsonb thamsonb.Value = cboten.Text

' thực thi command cmd.ExecuteScalar()

' hiển thị giá trị tham số txtsum.Text = sotien.Value

' đóng kết nối Ket_noi.Close()


5.4 DataReader

Là đối tượng truy cập dữ liệu trực tiếp, sử dụng con trỏ phía Server và duy trì kết nối với Server trong suốt quá trình đọc dữ liệu, DataReader thuộc không gian tên System.Data.OledbDataReader hoặc System.Data.SqlDataReader

5.4.1 Các thuộc tính của DataReader


Tên

Mô tả

FieldCount

Trả về số cột trên dòng hiện hành của DataReader.

IsClosed

Cho biết DataReader đã đóng chưa.

Item

Trị của cột truyền vào. Tham số truyền có thể là tên cột hoặc số thứ tự (từ 0)

5.4.2 Các phương thức của DataReader


Tên

Mô tả

Close

Đóng DataReader.

GetFieldType

Trả về kiểu dữ liệu của cột truyền vào.

GetName

Trả về tên của cột truyền vào.

GetOrdinal

Trả về số thứ tự của cột truyền vào (bắt đầu từ 0).

GetSchemaTable

Trả về bảng chứa thông tin mô tả cột của DataReader.

GetValue

Trả về giá trị trên cột truyền vào.

Read

Di chuyển đến dòng kế tiếp và trả về True nếu còn dòng để di chuyển, ngược lại trả về False

Trong khi DataReader đang mở, các thao tác dữ liệu khác trên nguồn dữ liệu đều không thể thực hiện cho đến khi DataReader đóng lại bằng lệnh Close.

5.4.3 Tạo và sử dụng DataReader

DataReader được tạo với cách duy nhất là gọi phương thức ExcuteReader của đối tượng Command.

Cú pháp: Tên_command.ExecuteReader() Hoặc

Tên_command.ExecuteReader(<behavior>)

Các giá trị của behavior:


Giá trị

Mô tả

CloseConnection

Khi đối tượng DataReader đóng lại, Connection tự động đóng theo.

Default

Tương tự như khi gọi ExecuteReader()

SchemaOnly

Truy vấn chỉ trả về cấu trúc các cột và không làm ảnh hưởng đến các thao tác khác.

Ví dụ 5.7 Thiết kế form như hình sau:

Form sử dụng DataReader để lưu trữ kết quả truy vấn được chọn trong Listbox1 4

Form sử dụng DataReader để lưu trữ kết quả truy vấn được chọn trong Listbox1. Nút OK để thực hiện truy vấn. Nếu còn dữ liệu chưa được đọc trong datareader thì nút OK chuyển thành nút Tiếp để xem các bản ghi còn lại. Nếu dữ liệu đã được đọc hết thì các hộp textbox sẽ được xóa trắng và nút Tiếp lại trở thành nút OK.

- Khai báo các biến chung của class: (đặt ngay sau dòng Public Class, bên ngoài tất cả các Sub).

Dim cmd As New SqlClient.SqlCommand Dim reader1 As SqlClient.SqlDataReader

- Gọi thủ tục Tao_Ket_Noi() trong sự kiện Load của Form

Tao_ket_noi()

- Đóng kết nối và đóng datareader trong sự kiện FormClosed

If Ket_noi.State = ConnectionState.Open Then reader1.Close()

End If

- Sự kiện Click của cmdOK

If ListBox1.SelectedItem Is Nothing Then MsgBox("Hãy chọn một câu lệnh")

Else

' tạo command cmd

cmd.CommandText = ListBox1.SelectedItem cmd.Connection = Ket_noi

' mở kết nối và tạo reader nếu kết nối đang đóng If Ket_noi.State = ConnectionState.Closed Then

Ket_noi.Open() reader1 = _

cmd.ExecuteReader(CommandBehavior.CloseConnection)

End If

' đọc dữ liệu trong reader1 vào textbox If reader1.Read() Then

cmdOK.Text = "Tiếp"

txtngay.Text = reader1.Item("ngayban") txtten.Text = reader1.Item("nguoiban") txtst.Text = reader1.Item("thanhtien")

Else

' đọc hết reader1 cmdOK.Text = "OK" txtten.Clear() txtst.Clear() reader1.Close()

End If

My.Application.DoEvents() End If


5.5 DataAdapter

Để lấy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng một đối tượng gọi là DataAdapter. Đối tượng này cho phép lấy cấu trúc và dữ liệu của các bảng trong nguồn dữ liệu.

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 27/12/2023