我在ASP.NET中使用EF 5.0,当我通过OLEDB执行我的存储过程时它返回值但是当我尝试通过实体框架执行相同的操作时,我得到oracle错误,因为
ORA-06550: PLS-00201: identifier 'userid' must be declared
请帮忙解决问题。张贴在我的EF代码下面。
Try
Dim db As New Entities
Dim param1 As OracleParameter = New OracleParameter("userid", OracleDbType.Varchar2)
Dim param2 As OracleParameter = New OracleParameter("pass", OracleDbType.Varchar2)
Dim param3 As OracleParameter = New OracleParameter("role", OracleDbType.Varchar2)
Dim param4 As OracleParameter = New OracleParameter("location", OracleDbType.Varchar2)
param1.Value = text1.value
param2.Value = text2.value
param1.Direction = ParameterDirection.Input
param2.Direction = ParameterDirection.Input
param3.Direction = ParameterDirection.Output
param4.Direction = ParameterDirection.Output
db.Database.ExecuteSqlCommand("BEGIN LOGIN_PROC(userid,pass,role,location); END;", param1, param2, param3, param4)
Dim test = param3.Value.ToString
Catch ex As Exception
end Try
答案 0 :(得分:0)
经过大量搜索后,我在Oracle社区发现了一篇文章。 https://community.oracle.com/thread/2228825?tstart=0,Graeme的解决方案适合我。
我完全删除了上面烦人的代码,并遵循了Graeme的说法,并让它运行起来。
解决方案很简单,只有3行代码,并且必须在Entity Framework 5.0中使用Add Function to Import
而没有返回值,之后它的工作就像魅力......
对于那些有同样问题的人,我在这里发布我的代码......
Dim Param1 = New ObjectParameter("role", GetType(String))
Dim Param2 = New ObjectParameter("location", GetType(String))
db.LOGIN_FUNC(text1.value,text2.value, Param1, Param2)
Dim Role = Param1.Value
Dim Location = Param2.Value
我真的搜索了4个多小时,最后我得到了它。另外,我要感谢Graeme(Stackflow会员) ..