首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在VB.NET中使用dbms_output.get_line

在VB.NET中使用dbms_output.get_line
EN

Stack Overflow用户
提问于 2011-04-14 01:34:11
回答 3查看 2.5K关注 0票数 0

我有一些要执行的存储过程,它们使用dbms_output.put_line()将数据放入输出缓冲区。

我知道我需要使用dbms_output.get_line(:line, :status)来检索该输出。我使用System.Data.OracleClient来避免甲骨文部署带来的麻烦。

那么我在下面的代码中做错了什么呢?

代码语言:javascript
运行
复制
Dim cmdSproc As OracleCommand = cnOracle.CreateCommand()
Dim strOracle As New OracleString()
Dim opaLine As New OracleParameter("lineOut", OracleType.VarChar, 255)
opaLine.Direction = ParameterDirection.Output
Dim opaStatus As New OracleParameter("status", 0)
cmdSproc.CommandText = "begin dbms_output.get_line(:lineOut,:status); end;"
cmdSproc.Parameters.Add(opaLine)
cmdSproc.Parameters.Add(opaStatus)

Dim strOutput As String = ""
strOracle = "0"
Try
   While strOracle = "0"
      cmdSproc.ExecuteOracleNonQuery(strOracle)
      strOutput = strOutput & strOracle.ToString() & vbNewLine
   End While
Catch ex As Exception
   MsgBox(ex.Message)
End Try
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-14 04:10:12

下面是我是如何让它工作的:(found it here)

代码语言:javascript
运行
复制
Dim cmdGetOutput As New OracleCommand("declare " & _
    " l_line varchar2(255); " & _
    " l_done number; " & _
    " l_buffer long; " & _
    "begin " & _
    " loop " & _
    " exit when length(l_buffer)+255 > :maxbytes OR l_done =1; " & _
    " dbms_output.get_line( l_line, l_done ); " & _
    " l_buffer := l_buffer || l_line || chr(10); " & _
    " end loop; " & _
    " :done := l_done; " & _
    " :buffer := l_buffer; " & _
    "end;", cnOracle)
cmdGetOutput.Parameters.Add("maxbytes", OracleType.Int16)
cmdGetOutput.Parameters("maxbytes").Value = 32000
cmdGetOutput.Parameters.Add("done", OracleType.Int16)
cmdGetOutput.Parameters("done").Direction = ParameterDirection.Output
cmdGetOutput.Parameters.Add("buffer", OracleType.LongVarChar, 32000)
cmdGetOutput.Parameters("buffer").Direction = ParameterDirection.Output

Dim strOutput As String = ""
Dim intStatus As Integer = 0
Try
   While True
      cmdGetOutput.ExecuteNonQuery()
      strOutput = strOutput & cmdGetOutput.Parameters("buffer").Value & vbNewLine
      If cmdGetOutput.Parameters("done").Value = 1 Then
         Exit While
      End If
   End While
Catch ex As Exception
   MsgBox(ex.Message)
Finally
   MsgBox(strOutput)
   cnOracle.Close()
End Try
票数 0
EN

Stack Overflow用户

发布于 2013-09-25 07:16:02

在vb.net中,SKINDER friend的代码格式如下...用于共享的thnxs

代码语言:javascript
运行
复制
Sub _showDbms() 
            Dim c As New OracleCommand()
            c.Connection = frmMain._cnn
            With c
                .CommandType = CommandType.Text
                .CommandText = "begin dbms_output.get_line(:line, :status); end;"
                .Parameters.Add(New OracleParameter("line", OracleDbType.Varchar2)).Size = 32000
                .Parameters("line").Direction = ParameterDirection.Output
                .Parameters.Add(New OracleParameter("status", OracleDbType.Int32))
                .Parameters("status").Direction = ParameterDirection.Output
            End With
            c.ExecuteNonQuery()
            If c.Parameters("line").Value IsNot DBNull.Value Then
                MsgBox(c.Parameters("line").Value.ToString)
            End If
    End Sub 
票数 1
EN

Stack Overflow用户

发布于 2012-09-06 23:26:43

在C#中,我使用下一种方法:

代码语言:javascript
运行
复制
    private string GetDbmsOutputLine()
    {
        OracleCommand command = new OracleCommand
        {
            Connection = <connection>,
            CommandText = "begin dbms_output.get_line(:line, :status); end;",
            CommandType = CommandType.Text
        };

        OracleParameter lineParameter = new OracleParameter("line",  
            OracleType.VarChar);
        lineParameter.Size = 32000;
        lineParameter.Direction = ParameterDirection.Output;
        command.Parameters.Add(lineParameter);

        OracleParameter statusParameter = new OracleParameter("status",  
            OracleType.Int32);
        statusParameter.Direction = ParameterDirection.Output;
        command.Parameters.Add(statusParameter);

        command.ExecuteNonQuery();

        if (command.Parameters["line"].Value is DBNull)
            return null;

        string line = command.Parameters["line"].Value as string;

        return line;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5653201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档