首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

,Oracle数据库中数据参数传递有关问题

2013-07-08 
求助,Oracle数据库中数据参数传递问题背景:数据库采用ORACLE在数据访问层Oracle.DataAccess.Client.Oracle

求助,Oracle数据库中数据参数传递问题
背景:数据库采用ORACLE
在数据访问层
Oracle.DataAccess.Client.OracleParameter pram1 = new Oracle.DataAccess.Client.OracleParameter("p_cursor",Oracle.DataAccess.Client.OracleDbType.RefCursor);
pram1.Direction = ParameterDirection.Output;
cmd.Parameters.Add(pram1);

这里的时候取出的参数是输出是没有问题的



问题是:如何输入时能够把一个集合当输入参数传递给ORACLE的存储过程?以下代码出错提示是参数传递错误。
有经验的朋友们们给点建议,如何我能把一个DataTable集合做为一个传递参数给这个存储过程
代码简单的略写为以下:

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
OracleTransaction txn = conn.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.Transaction = txn;
cmd.CommandText = @"p_insert_dataset_l1";
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter pTable = new OracleParameter("ds_insert", OracleDbType.RefCursor);
pTable.Value = dt;  //----这里,组合了一个有行和列的DataTable,并且有内容,传递进入
cmd.Parameters.Add(pTable);
cmd.ExecuteNonQuery();
txn.Commit();
txn.Dispose();
cmd.Dispose();
[解决办法]
你可以把DataTable集合序列化为XML,以XML字符串的方式传递给存储过程

然后再数据库中可以解析XML
[解决办法]

引用:
你可以把DataTable集合序列化为XML,以XML字符串的方式传递给存储过程

然后再数据库中可以解析XML

同意。传xml字符串
oracle 解析xml字符串
参考http://blog.sina.com.cn/s/blog_a539013401015tdb.html
[解决办法]
引用:
楼上的意思我也考虑过,但不管是在数据库中做字符串拼接或者解析或者在程序中做拼接解析,其实都是需要花不少的时间去解析的。这样的效率和一条条往数据库里去插入或者增加事务一千条一千条提交的速度是一样的。没有达到入库速度提高的目的
我的问题是否有可能,输入参数就是一个集合(DataTable或者DataSet)
存储过程的代码是这样的:

create or replace procedure p_insert_dataset_l1(ds_insert sys_refcursor) is
  TYPE rc_channel_value IS RECORD(n_cha_id t_channel_value_l0.cdv_cha_id%TYPE,
                                  n_time t_channel_value_l0.cdv_timestamp%TYPE,
                                  n_val t_channel_value_l0.cdv_val%TYPE);


  TYPE ty_cha_val IS TABLE OF rc_channel_value;

  tc_cha_val ty_cha_val;
begin

  FETCH ds_insert BULK COLLECT INTO tc_cha_val;

  FORALL I IN 1..tc_cha_val.COUNT  
  INSERT INTO t_channel_value_l1 VALUES (tc_cha_val(I).n_cha_id,tc_cha_val(I).n_time,tc_cha_val(I).n_val);

  commit;
end p_insert_dataset_l1;


无论怎样,都有一个原则,即是你传递过去的内容能被数据库解析才行

能够解析的类型,建表的时候也能看到,你可以传字符串,可以xml,字符串就是要分离操作,貌似比较可行的就是结构规范化的XML,解析也方便

热点排行