Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用存储过程时参数的数目或类型错误_C#_Oracle - Fatal编程技术网

C# 调用存储过程时参数的数目或类型错误

C# 调用存储过程时参数的数目或类型错误,c#,oracle,C#,Oracle,下面的代码发送值​​在文本框中输入到oracle数据库的列表中 这个列表调用oracle过程 我想发送值​​从该列表返回到gridview public void gridDoldur() { var seciliProsedur = "Z_LABEL_PRINTER.LabelPieceList"; List<string> gridList = OraclePieceList();

下面的代码发送值​​在文本框中输入到oracle数据库的列表中

这个列表调用oracle过程

我想发送值​​从该列表返回到gridview

   public void gridDoldur()
            {

                var seciliProsedur = "Z_LABEL_PRINTER.LabelPieceList";

                List<string> gridList = OraclePieceList();
 using (OracleConnection con = new OracleConnection(connectionString))
            {
                OracleCommand cmd = new OracleCommand(seciliProsedur, con);
                con.Open();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("p_piece_id", OracleDbType.Varchar2).Value = gridList;
                cmd.Parameters.Add("p_rc",OracleDbType.RefCursor).DirectionParameterDirection.Output;
                OracleDataAdapter da = new OracleDataAdapter(cmd);
                OracleCommandBuilder commandBuilder = new OracleCommandBuilder(da);
                DataTable dt = new DataTable();
                da.Fill(dt);
                this.gridPieceList.Visible = true;
                gridPieceList.DataSource = dt;
            }
            conn.Close();

        }

        public List<string> OraclePieceList()
        {

            List<string> pieces = new List<string>();
            for (int i = 0; i < txtListe.Lines.Count(); i++)
            {
                pieces.Add(txtListe.Lines[i]);
            }

            return pieces;
        }
正文:

CREATE OR REPLACE PACKAGE BODY .Z_LABEL_PRINTER
AS
PROCEDURE LabelPieceList(p_piece_id IN t_piece_id,
p_rc IN OUT sys_refcursor)

as
BEGIN
    OPEN p_rc FOR
    SELECT * FROM piece WHERE PIECE_ID IN (SELECT * FROM TABLE(p_piece_id));
    END;
-- Package body
END Z_LABEL_PRINTER;
但我遇到了这个错误:

ORA-06550:第1行第7列:PLS-00306:错误的编号或类型 调用“LabelPieceList”中的参数


我想您必须将p_rc参数设置为
OUT
,而不是
IN-OUT
。我已经更改了它,但它不起作用。
CREATE OR REPLACE PACKAGE BODY .Z_LABEL_PRINTER
AS
PROCEDURE LabelPieceList(p_piece_id IN t_piece_id,
p_rc IN OUT sys_refcursor)

as
BEGIN
    OPEN p_rc FOR
    SELECT * FROM piece WHERE PIECE_ID IN (SELECT * FROM TABLE(p_piece_id));
    END;
-- Package body
END Z_LABEL_PRINTER;