Return count End Function Always use parameters when filtering data.

Return dataTable End Function

Return employees End Function This approach loads all data into memory and works well for data binding.

Imports System.Data.SqlClient Public Async Function GetEmployeesAsync() As Task(Of List(Of Employee)) Dim employees As New List(Of Employee)() Dim connectionString As String = "Server=localhost;Database=YourDatabase;Integrated Security=True;"

Using connection As New SqlConnection(connectionString) Dim query As String = "SELECT EmployeeID, FirstName, LastName, Department, Salary FROM Employees" Dim command As New SqlCommand(query, connection) Try connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() While reader.Read() Dim emp As New Employee() emp.EmployeeID = Convert.ToInt32(reader("EmployeeID")) emp.FirstName = reader("FirstName").ToString() emp.LastName = reader("LastName").ToString() emp.Department = reader("Department").ToString() emp.Salary = Convert.ToDecimal(reader("Salary")) employees.Add(emp) End While reader.Close() Catch ex As SqlException MessageBox.Show("SQL Error: " & ex.Message) End Try End Using

Private Sub LoadDataToGrid() Dim dt As DataTable = GetEmployeesAsDataTable() DataGridView1.DataSource = dt End Sub Use ExecuteScalar when you expect a single value (e.g., COUNT, SUM, or a specific field).

Public Function GetEmployeeCount() As Integer Dim count As Integer = 0 Dim connectionString As String = "Server=localhost;Database=YourDatabase;Integrated Security=True;" Using connection As New SqlConnection(connectionString) Dim query As String = "SELECT COUNT(*) FROM Employees" Dim command As New SqlCommand(query, connection) Try connection.Open() count = Convert.ToInt32(command.ExecuteScalar()) Catch ex As SqlException MessageBox.Show("Error: " & ex.Message) End Try End Using