ExecuteScalar возвращает одну строку с одним столбцом, но не возвращает DataReader, из которого вы получаете данные.Вместо этого он возвращает непосредственно это единственное значение как объект.Этот объект может быть Nothing, если запрос не найдет ни одной строки, соответствующей оператору Where
Если вы хотите получить только первое имя, вам следует изменить текст запроса на
Dim sql_string As String = "SELECT first_name FROM employees WHERE id = @id"
Using cmd As New SQLiteCommand(connection:=conn, commandText:=sql_string)
cmd.Parameters.AddWithValue("@id", employee_id)
Dim result As Object = cmd.ExecuteScalar()
If result <> Nothing Then
Me.user_details(2) = result.ToString()
End If
End Using
Вместо этого, если вы хотите извлечь все поля (или более одного поля) из этой записи, вы используете ExecuteReader, а затем начинаете читать результаты с
Dim sql_string As String = "SELECT first_name, last_name, city FROM employees WHERE id = @id"
Using cmd As New SQLiteCommand(connection:=conn, commandText:=sql_string)
cmd.Parameters.AddWithValue("@id", employee_id)
Dim reader = cmd.ExecuteReader()
' Try to position the reader on the first record returned by the query
' if there isn't records the Read returns false.
' You can also test this with reader.HasRows
While reader.Read()
Me.user_details(1) = reader("last_name").ToString()
Me.user_details(2) = reader("first_name").ToString()
Me.user_details(3) = reader("city").ToString()
End While
End Using