使用以下代码从数据库返回单个记录。我已经读过ExecuteScalar是返回单个记录的正确方法。我从来没有能够让ExecuteScalar工作。我如何使用ExecuteScalar将其更改为在VB.Net中返回单个值?
Dim oracleConnection As New OracleConnection
oracleConnection.ConnectionString = LocalConnectionString()
Dim cmd As New OracleCommand()
Dim o racleDataAdapter As New OracleClient.OracleDataAdapter
cmd.Connection = oracleConnection
cmd.CommandText = "FALCON.CMS_DATA.GET_MAX_CMS_TH"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New OracleParameter("i_FACID_C", OracleType.Char)).Value = facilityShortName
cmd.Parameters.Add(New OracleParameter("RS_MAX", OracleType.Cursor)).Direction = ParameterDirection.Output
Try
Using oracleConnection
oracleConnection.Open()
Using oracleDataAdapter
oracleDataAdapter = New OracleClient.OracleDataAdapter(cmd)
Dim workingDataSet As DataSet
oracleDataAdapter.TableMappings.Add("OutputSH", "RS_MAX")
workingDataSet = New DataSet
oracleDataAdapter.Fill(workingDataSet)
For Each row As DataRow In workingDataSet.Tables(0).Rows
Return CDate(row("MAXDATE"))
Next
End Using
End Using
答案 0 :(得分:3)
来自Microsoft
“OracleCommand类的ExecuteOracleScalar()方法用于执行将单个值作为OracleType数据类型返回的SQL语句或存储过程。如果该命令返回结果集,则该方法返回第一个值第一行的列。如果返回REF CURSOR而不是REF CURSOR指向的第一行的第一列的值,则该方法返回空引用.OracleCommand类的ExecuteScalar()方法类似于ExecuteOracleScalar()方法,但它返回一个值作为.NET Framework数据类型。
话虽如此,在使用Oracle存储过程时,这些方法都不是很有用。 Oracle存储过程不能作为RETURN语句的一部分返回值,仅作为OUT参数返回 - 请参阅“不返回数据的存储过程”部分。此外,除非通过REF CURSOR输出参数,否则无法返回结果集 - 这将在下一节中讨论。
只能使用RETURN参数(如上一节所示)而不是使用ExecuteScalar方法之一来检索Oracle函数的返回值。“
答案 1 :(得分:2)
ExecuteScalar返回单个值(标量)而不是记录。
答案 2 :(得分:0)
不确定为什么其他答案被标记为已接受,因为它似乎没有回答您的问题
如何使用ExecuteScaler
更改此值以在VB.Net中返回单个值
ExecuteScalar只会返回单个值 - 因此在编写命令的查询部分时请记住这一点。 完成此任务的代码如下:
oracleConnection.Open
Dim obj as object 'Object to hold our return value
obj = cmd.ExecuteScalar()
oracleConnection.Close
If obj IsNot Nothing then
Return CDate(obj)
end if