如何使用ExecuteScalar从Oracle数据库返回单个值?

时间:2008-12-11 22:10:28

标签: vb.net oracle

使用以下代码从数据库返回单个记录。我已经读过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

3 个答案:

答案 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函数的返回值。“

http://msdn.microsoft.com/en-us/library/ms971506.aspx

答案 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