c# - 调用存储过程时参数错误的数量或类型错误
问题描述
下面的代码将文本框中输入的值以列表的形式发送到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;
}
Oracle 程序:声明
CREATE OR REPLACE PACKAGE Z_LABEL_PRINTER
AS
TYPE t_piece_id IS TABLE OF piece.PIECE_ID %type index by pls_integer;
PROCEDURE LabelPieceList (p_piece_id IN t_piece_id,
p_rc IN OUT sys_refcursor);
END Z_LABEL_PRINTER;
身体 :
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”时参数的数量或类型错误
解决方案
推荐阅读
- c++ - 在 Eclipse 中编辑代码模板以强制执行 doxygen 文档
- c# - 在 C# 中,如何查看帐户中的第一个字符是否为特定值?
- google-app-engine - Go 应用引擎 dev_appserver.py 不支持运行时 go112
- pdf - p:media 在 FireFox 中不起作用,但在 Chrome 和 Opera 中有效
- mongodb - 使用 Studio 3T 时在 MongoDB 中选择不同的值
- pdf - 数字 PDF 文档签名
- python-3.x - 如何使用谷歌云路径(gs://)获取谷歌云存储桶中的所有训练文件和测试文件来训练ai平台中的作业
- linux - 如何在linux中打印搜索文本的行号
- apache-spark - 如何在每个时间窗口获取记录子集?
- gerrit - 如何在 gerrit 项目中默认启用注释已解析(未解析)标志