{"ORA-06550: 第 1 行, 第 7 列: /nPLS-00306: 调用 'NIEC_ADDUSER' 时参数个数或类型错误/nORA-06550: 第 1 行, 第 7 列: /nPL/SQL: Statement ignored/n"}

来源:互联网 发布:淘宝化妆品有假货吗 编辑:程序博客网 时间:2024/05/21 10:28

       这个问题困扰了我0.6个工作日,终于解决!

存储过程如下:

CREATE OR REPLACE PROCEDURE "NIEC_ADDUSER" --2007-5-25增加用户----〉普通
(
   Typeid   in char,
    Name     in char,
    Email    in char,
    Password in char,
    UserID   out number,
    datetime in date
)is
begin
select seq_niec_users.nextval into UserID from dual;
--select sysdate into datetime from dual;
INSERT INTO niec_users
(
    UserID,
    typeid,
    Name,
    Email,
    logintime,
    Password,
    vipsign
)
VALUES
(
    UserID,
    typeid,
    Name,
    Email,
    datetime,
    Password,
    '0'
);
select seq_niec_users.currval into UserID from dual;
end;

后台调用代码如下:

OracleConnection myConnection = new OracleConnection(System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]);
            OracleCommand myCommand = new OracleCommand("NIEC_ADDUSER", myConnection);

            myCommand.CommandType = CommandType.StoredProcedure;

            OracleParameter parameterTypeid = new OracleParameter("Typeid", OracleType.Char);
            parameterTypeid.Value = typeid;
            parameterTypeid.Direction = ParameterDirection.Input;
            myCommand.Parameters.Add(parameterTypeid);

            OracleParameter parameterFullName = new OracleParameter("Name", OracleType.Char);
            parameterFullName.Value = fullName;
            parameterFullName.Direction = ParameterDirection.Input;
            myCommand.Parameters.Add(parameterFullName);

            OracleParameter parameterEmail = new OracleParameter("Email", OracleType.Char);
            parameterEmail.Value = email;
            parameterEmail.Direction = ParameterDirection.Input;
            myCommand.Parameters.Add(parameterEmail);

            OracleParameter parameterPassword = new OracleParameter("Password", OracleType.Char);
            parameterPassword.Value = password;
            parameterPassword.Direction = ParameterDirection.Input;
            myCommand.Parameters.Add(parameterPassword);

            OracleParameter parameterUserId = new OracleParameter("UserID", OracleType.Number);
            parameterUserId.Direction = ParameterDirection.Output;
            myCommand.Parameters.Add(parameterUserId);

            myCommand.Parameters.Add("datetime", OracleType.DateTime);
            myCommand.Parameters["datetime"].Value = System.DateTime.Now;

            //OracleParameter parameterDateTime = new OracleParameter("datetime", OracleType.DateTime);
            //parameterUserId.Direction = ParameterDirection.Input;
            //parameterDateTime.Value = System.DateTime.Now;
            //myCommand.Parameters.Add(parameterDateTime);

            try
            {
                myCommand.Connection.Open();
                myCommand.ExecuteNonQuery();
            }
            catch(Exception e)
            {
                throw e;
                return -1;
            }
            finally
            {

                if (myConnection.State == ConnectionState.Open)
                    myConnection.Close();
            }

当用红色字体时就会报标题上显示的错误!当我换成绿色字体的代码时就不再报错了!!!!但是我不清楚为什么会这样?如果有谁知道请顶一下,不胜感谢!!!!!!!!!!!!!!!!