【发布时间】:2016-10-27 21:19:47
【问题描述】:
我已经创建了一个程序来测试这个问题,它在 oracle 开发人员中可以正常工作。有一个名为“dizi”的类型(数组和varchar2)。并且程序有输入参数。我正在尝试将一个数组作为 c# 中的参数传递给这个过程。我已经搜索了很多,但我无法解决问题。错误是:“并非所有可验证”
public void InsertQuestion(List<string> area_list)
{
quest_areas = area_list.ToArray();
command = new OracleCommand();
command.Connection = connect;
connect.Open();
var arry = command.Parameters.Add("area_array",OracleDbType.Varchar2);
arry.Direction = ParameterDirection.Input;
arry.Size = quest_areas.Length;
arry.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
arry.Value = quest_areas;
command.BindByName = true;
command.CommandText ="TESTPROCEDURE(:area_array)";
command.CommandType = CommandType.StoredProcedure;
command.ExecuteNonQuery();
connect.Close();
}
这是我的程序(它只是为了测试,但我会使用类似的东西)
CREATE OR REPLACE PROCEDURE TESTPROCEDURE (t_in IN dizi)
IS
BEGIN
FOR i IN 1..t_in.count LOOP
dbms_output.put_line(t_in(i));
END LOOP;
END;
【问题讨论】:
-
试试
command.CommandType = CommandType.Text; command.CommandText ="BEGIN TESTPROCEDURE(:area_array); END;"; -
我认为当你使用
CommandType = CommandType.StoredProcedure;时你不能使用BindByName = true;。 -
请在答案下查看我的评论
标签: c# arrays oracle stored-procedures