vb.net - 您如何使用 ExecuteScalar 从 Oracle 数据库返回单个值?

标签 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

最佳答案

来自微软

"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

关于vb.net - 您如何使用 ExecuteScalar 从 Oracle 数据库返回单个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361175/

相关文章:

vb.net - 集合被修改;枚举操作可能无法执行 #10897

vb.net - 哪种形式导致了我的异常(exception)?

sql - Oracle apex_json.parse,速度

sql - 甲骨文 SQL : SQL join with group by (count) and having clauses

sql - 如何将值列表传递给一个 Oracle Report 参数?

vb.net - 我可以更改折线图的宽度吗?

asp.net - 在 Controller ASP.Net MVC 之间使用

vb.net - Global.Micrsoft.VisualBasic.ApplicationsServices... 未定义错误 BC30002

xml - 如何正确使用AddBatch/withBatch将xml标签值批量插入数据库表

c# - OracleDataClientBatchingBatcherFactory 引发空引用异常