Asp.net ODP.NET VB.NET调用存储过程并返回refCursor
这个问题已经让我发疯一天多了。我可以创建到数据库的连接,我可以执行sql并从中返回结果,但我似乎不能调用存储过程。这是密码Asp.net ODP.NET VB.NET调用存储过程并返回refCursor,asp.net,vb.net,oracle,odp.net,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.StoredP
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,但它是空的。我一定是疯了
感谢任何帮助任何可能有此问题的人,我正在将OracleDBType.Varchar2作为参数传递给上述VB方法。但是我把它声明为一个整数,它需要作为OracleDBType显式传递好吧,我是个白痴,请忽略这个问题。上面的代码很好,工作非常完美,我在这里简化了我的代码,让每个人都更容易阅读,然后测试了简化的代码,它工作了,所以我知道问题在哪里,可以开始缩小范围。因此,对于可能有此问题并因缺乏答案而愤怒的其他人,我将OracleDBType.Varchar2作为参数传递给上述VB方法。但是我将它声明为整数,它需要作为OracleDBType显式传递。将您的注释作为答案发布并接受它!