首页 > 解决方案 > 如何将列表从 c# 传递到 oracle 过程

问题描述

我有一个代码将数据作为字符串列表从文本框发送到 oracle 过程。

我在下面的文本框中得到了值。

      public List<string> TxtPieceList()
{

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

    return pieces;
}

我发送了两个变量。

p_piece_id 从文本框中赋值。

p_mother_check 从复选框中赋值。

然后我将这些数据传递给程序:

 public void gridDoldur()
        {

            var annesecilimi = cbMother.Checked;

            List<string> gridList = TxtPieceList();
  using (OracleConnection con = new OracleConnection(connectionString))
            {
                OracleCommand cmd = new OracleCommand("Z_LABEL_PRINTER_GR.LabelPieceList", con);
                con.Open();
                cmd.CommandType = CommandType.StoredProcedure;
                try
                {
                    OracleParameter p_piece_id = new OracleParameter();
                    OracleParameter p_mother_check = new OracleParameter();

                    p_piece_id.OracleDbType = OracleDbType.Varchar2;
                    p_mother_check.OracleDbType = OracleDbType.Varchar2;
                    p_piece_id.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
                    p_mother_check.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
                    p_piece_id.Value = from emp in gridList select emp;

                    p_mother_check.Value = annesecilimi;

                    cmd.Parameters.Add(p_piece_id);
                    cmd.Parameters.Add(p_mother_check);
                    cmd.Parameters.Add("p_rc", OracleDbType.RefCursor).Direction = ParameterDirection.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;
                }

但是我在通过 oracle 返回值的过程中遇到错误。

OracleParameter 值无效。

CREATE OR REPLACE PACKAGE BODY Z_LABEL_PRINTER_GR
AS
T_STRING_LIST DEFINAION : TYPE                "T_STRING_LIST" AS TABLE OF VARCHAR2(2000)    
PROCEDURE LabelPieceList(p_piece_id IN  T_STRING_LIST,
p_mother_check IN varchar2,
p_rc OUT sys_refcursor)
IS
    BEGIN
    IF p_mother_check='False' THEN
    OPEN p_rc FOR
    SELECT PIECE_NUM_ID,PIECE_ID,ACTUAL_WEIGHT,ACTUAL_THICK,ACTUAL_WIDTH 
    FROM piece WHERE PIECE_ID IN (SELECT COLUMN_VALUE FROM TABLE(p_piece_id))

    ELSE

    OPEN p_rc FOR
    SELECT PIECE_NUM_ID,PIECE_ID,ACTUAL_WEIGHT,ACTUAL_THICK,ACTUAL_WIDTH FROM piece WHERE PIECE_ID IN(
    (SELECT COLUMN_VALUE FROM TABLE(p_piece_id)) AND PH.STATUS=2);
    END IF ; 

    END LabelPieceList;

-- Package body
END Z_LABEL_PRINTER_GR;

标签: c#sqloracle

解决方案


推荐阅读