vb.net - 如何在 VB.NET 中使用 command.ExecuteScalar 从 SQL 查询中获取单行/记录
问题描述
我试图通过使用主键执行 SELECT 语句来获得单行
我试图将输出分配command.ExecuteScalar()
给一个Object
变量,然后尝试通过键访问值,例如obj('column_name')
Using conn As New SQLiteConnection(connectionString:=connection.get_connection_string())
conn.Open()
Dim sql_string As String = "SELECT * FROM employees WHERE id = @id"
Using cmd As New SQLiteCommand(connection:=conn, commandText:=sql_string)
cmd.Parameters.AddWithValue("@id", employee_id)
Dim reader As Object = cmd.ExecuteScalar()
If reader <> Nothing Then
Me.user_details(2) = reader("first_name")
End If
End Using
End Using
我期望从中获得列中的值,first_name
但reader('first_name')
我遇到了一个NullReferenceException
例外
解决方案
ExecuteScalar 返回单行和单列,但不返回从中获取数据的 DataReader。相反,它直接将单个值作为对象返回。如果查询未找到与 Where 语句匹配的任何行,则此对象可能为 Nothing
如果您只想获得名字,那么您应该将查询文本更改为
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
推荐阅读
- r - 在不更改 wd 的情况下连接到 SQLite db
- python - Python/OpenCV — 细菌簇中的质心测定
- c# - 发布 .NET Web 应用程序时出现“索引超出数组范围”错误
- discord.js - 如何让我的机器人通过命令示例 ping 一个人:!eat @the user i want, the bot: @the user has been eated
- python - 使用类定义编程
- pyspark - 从 Databricks 中的 Pyspark 数据帧优化 SQL 表创建
- node.js - 删除数组中数组中的一项
- botframework - Bot 不适用于 MS Teams 中的 1 对 1 聊天
- docker - 使用处于挂起状态的 kubernetes pod 部署时节点上的磁盘压力
- javascript - 您可能在观察者中有一个无限更新循环,在 vue 中出现表达式“tabs”错误