【发布时间】:2011-06-20 13:22:51
【问题描述】:
我的场景
我正在使用带有 c# 3.5 的 ODP.NET oracle 提供程序,我正在尝试将一个数组作为参数传递给一个过程......像这样:
var paramNames = new OracleParameter();
paramNames.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
paramNames.ParameterName = "P_JOB_TITLE";
paramNames.Size = 2;
paramNames.Value = new string[2]{ "name1", "name1" };
cmd.Parameters.Add(paramNames);
当运行时代码进入 paramNames.Value = new string[2]{ "name1", "name1" };它捕获了这个错误
“值不在预期范围内”
谁能解决?
附加信息
指定 OracleDbType 错误已修复,但执行给我一些错误
paramNames.OracleDbType = OracleDbType.Varchar2;
“无法将 'System.String[]' 类型的对象转换为 'System.IConvertible' 类型。”
我的目标是做这样的事情
http://aspalliance.com/621_Using_ODPNET_to_Insert_Multiple_Rows_within_a_Single_Round_Trip.3
另一个没有参数的问题
像这样插入一个输出参数
paramNames = new OracleParameter();
paramNames.ParameterName = "O_JOB_ID";
paramNames.Size = 3;
paramNames.Direction = ParameterDirection.Output;
paramNames.OracleDbType = OracleDbType.Int32;
paramNames.Value = new int[3] { 0, 0, 0 }; ;
cmd.Parameters.Add(paramNames);
当 ExecuteNonQuery 完成时它被正确填充。例如,pls-sql 过程执行 3 次插入,然后我返回每个数组记录的 row-id。
但是我出了点问题,例如第二行,整个 OUT 参数(数组)总是设置为 0。我希望至少 params[0].value 得到了增强
谢谢
【问题讨论】:
标签: c# arrays oracle binding odp.net