c# - 如何将列表从 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;
解决方案
推荐阅读
- python - OpenCV python,如何以pythonically方式将操作应用于单个通道?
- java - Spring Boot 应用程序中的自定义异常抛出
- jspdf - jsPDF-CustomFonts-support 不适用于 Bangla 字体我正在使用 jspdf-autotable
- java - 我如何将模板发送给用户,用户可以在其中编辑 pdf 并且所有文本框和复选框都内联放置
- laravel - Laravel 在集合中添加属性并在 Vue.js 中显示
- powershell - 日志文件格式被搞砸了
- coordinates - 可以以编程方式从 psd 文件中检索 Photoshop 引导线的坐标吗?
- xamarin - 带有 WebView 控件的 Xamarin ItemTemplate
- php - Laravel 测试响应给定的数据无效
- c++ - 在 Visual Studio Community 2019 中生成包含文件的图表