我正在学习使用存储过程
数据库ORACLE,存储过程如下:
CREATE OR REPLACE PROCEDURE TestInsert(idnum in number)
as
begin  INSERT INTO clob_test2 (id) values(idnum);end TestInsert;有一段C#代码,调用存储过程
 string SQL = "TESTINSERT";
                cmd.CommandText = SQL;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("xx", OracleType.Number);
                cmd.Parameters[0].Value = "210";
                cmd.ExecuteNonQuery();报错如下:
ORA-06550: 行1、列7:
PLS-00306: 调用'TESTINSERT'时自变量数量或类型错误
ORA-06550: 行1、列7:
PL/SQL: Statement ignored请问应该怎么改?

解决方案 »

  1.   

    cmd.CommandText = 存储过程的名字;
      

  2.   

    string SQL = "TESTINSERT";
                    cmd.CommandText = SQL;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("xx", OracleType.Number);
                    cmd.Parameters[0].Value = "210";
                    cmd.ExecuteNonQuery();cmd.Parameters[0].Value = "210" 不应该是字符,
    改为cmd.Parameters[0].Value = 210
      

  3.   

    cmd.Parameters.Add("xx", OracleType.Number);参数名写的不正确
      

  4.   


    正确 
    cmd.Parameters.Add("@idnum", OracleType.Number); 
      

  5.   

    string SQL = "TESTINSERT";
                    cmd.CommandText = SQL;
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("idnum", OracleType.Number);  // 参数名是存储过程参数名相同
                    cmd.Parameters[0].Value = "210";                 // 用“210” 和 210 都可以
                    cmd.ExecuteNonQuery();改成这样就成功了
      

  6.   

    这个,MSDN里写得很详细的,我第一次用的时候看了MSDN就知道怎么写了。
      

  7.   

    CREATE OR REPLACE PROCEDURE TestInsert
    @idnum number
    as
    begin  INSERT INTO clob_test2 (id) values(idnum);end TestInsert;string SQL = "exec TESTINSERT @idnum";
                    cmd.CommandText = SQL;
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add("@idnum", OracleType.Number);
                    cmd.Parameters[0].Value = 210;
                    cmd.ExecuteNonQuery();
      

  8.   

    CREATE OR REPLACE PROCEDURE TestInsert 
    @idnum number 
    as 
    begin   INSERT INTO clob_test2 (id) values(@idnum); end TestInsert; string SQL = "exec TESTINSERT @idnum"; 
                    cmd.CommandText = SQL; 
                    cmd.CommandType = CommandType.Text; 
                    cmd.Parameters.Add("@idnum", OracleType.Number); 
                    cmd.Parameters[0].Value = 210; 
                    cmd.ExecuteNonQuery();
      

  9.   

    cmd.Parameters.Add("xx", OracleType.Number); 
    你确定参数写的没错?