ODP.NET VB.Net调用存储过程并返回refCursor

时间:2011-03-27 23:49:34

标签: asp.net vb.net oracle odp.net

这个问题让我疯了一天多了。我可以创建一个到数据库的连接,我可以执行sql并从中返回结果但我似乎无法调用存储过程。这是代码

    Dim myCMD As New OracleCommand
    Dim TheDataReader as New OracleDataReader

    myConnection1.Open()

    myCMD.Connection = myConnection1
    myCMD.CommandType = CommandType.StoredProcedure
    myCMD.CommandText = "WS_DATA_LAYER.select_user_groups"

    myCMD.Parameters.Add(New OracleParameter("id_user", OracleDbType.VarChar2)).Value = "TXA"
    myCMD.Parameters.Add(New OracleParameter("ws_rs", OracleDbType.RefCursor)).Direction = ParameterDirection.Output

    ' Tried every single execute function here and none have worked
    ' Either error is thrown or empty refcursor
    myCMD.ExecuteScalar()

    TheDataReader = myCMD.Parameters(1).Value().GetDataReader()

问题在于ExecuteScalar。它抛出了一个名为“输入字符串格式不正确”的异常。我已经尝试用Oracle单引号传递字符串并得到相同的东西。如果我使用

    TheDataReader = myCMD.ExecuteQuery()

它工作正常但没有返回结果。我已经验证过程会返回我登录的用户的结果。当查询执行时,我可以看到一个refcursor,但它是空的。我一定是疯了。

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

其他可能有这个问题的人,我把OracleDBType.Varchar2作为参数传递给上面的VB方法。但我把它声明为一个整数,它需要显式传递为OracleDBType