Oracle中的登录存储过程错误:PLS-00306

时间:2013-04-09 14:17:34

标签: oracle stored-procedures sqldatasource

我正在从ASP.NET SqlDataSource调用包中的存储过程但是我一直收到以下错误。

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'VALIDATE_USER_PRC'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

我的存储过程如下:

PROCEDURE VALIDATE_USER_PRC(P_APPLICATIONNAME IN TBL_USERS.APPLICATIONNAME%TYPE,
P_USERNAME IN TBL_USERS.USERNAME%TYPE,
P_PASSWORD IN TBL_USERS.USERPASSWORD%TYPE,
P_RESULTS OUT NUMBER)
IS
BEGIN
SELECT COUNT(*) INTO P_RESULTS FROM TBL_USERS WHERE USERNAME=P_USERNAME
AND (USERPASSWORD=P_PASSWORD)
AND APPLICATIONNAME=P_APPLICATIONNAME;
END VALIDATE_USER_PRC;

它在我的包PARENT_USER_API中声明。

  • TBL_USERS.APPLICATIONNAME%TYPE = VARCHAR2(255)
  • TBL_USERS.USERNAME%TYPE = VARCHAR2(255)
  • TBL_USERS.USERPASSWORD%TYPE = VARCHAR2(128)

最后我的ASP.NET代码看起来像这样:

<asp:SqlDataSource ID="dsLogin" runat="server" CancelSelectOnNullParameter="false"
   ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
   ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
   SelectCommand="PARENT_USER_API.VALIDATE_USER_PRC" SelectCommandType="StoredProcedure">
   <SelectParameters>     
      <asp:Parameter Name="P_APPLICATIONNAME" DefaultValue="/PortailParent" Type="String" />
      <asp:ControlParameter ControlID="txtUser" Name="P_USERNAME" PropertyName="Text"  Type="String" />
      <asp:ControlParameter ControlID="txtPass" Name="P_USERPASSWORD" PropertyName="Text"  Type="String" />
      <asp:Parameter Name="P_RESULTS" Direction="Output" Type="Int32" />
   </SelectParameters>
</asp:SqlDataSource>

我使用 R_RESULTS 的原因是查看是否使用给定的用户名和密码返回任何行,以验证尝试登录的用户。

谁能告诉我我做错了什么?我已经搜索了几个小时,并尝试了几件没有运气的东西。非常感谢!

2 个答案:

答案 0 :(得分:1)

如果您的"P_RESULTS"int32字段,请尝试将out参数的类型更改为OracleDbType.Int32。

我希望它有效。

查看此帖子。 C#: Oracle Data Type Equivalence with OracleDbType

答案 1 :(得分:1)

解决!

令人尴尬的是,我的问题的答案出现在SelectParameters的{​​{1}}。

SqlDataSource

我提供的名称是<asp:ControlParameter ControlID="txtPass" Name="P_USERPASSWORD" PropertyName="Text" Type="String" /> ,而不仅仅是P_USERPASSWORD

显然我忘记在将P_PASSWORD转换为SqlDataSource的{​​{1}}中的SelectCommand并将其转换为存储过程对象后,我忘了更改它。