日期:2014-05-17  浏览次数:21015 次

ODP.NET 存储过程解惑 关于关键字
下面代码能实现把数组 WELL_ID,REF_WELL_ID  插入到 td_bas_well 表中,
请问各位,怎样以同样的方式实现更新呢?
网上说可以执行更新,但是我试了很多次都失败了,
这是网址:http://blog.csdn.net/hawksoft/article/details/7528384

            string[] WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
            string[] REF_WELL_ID = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };

            OracleCommand theCmmd = new OracleCommand("insert into td_bas_well (WELL_ID,REF_WELL_ID) values(:WELL_ID,:REF_WELL_ID)", ConnPool.GetTargetConn().Conn);
            theCmmd.ArrayBindCount = WELL_ID.Length;//关键点  
            theCmmd.Parameters.Add(new OracleParameter("WELL_ID", OracleDbType.Varchar2, WELL_ID, System.Data.ParameterDirection.Input));
            theCmmd.Parameters.Add(new OracleParameter("REF_WELL_ID", OracleDbType.Varchar2, REF_WELL_ID, System.Data.ParameterDirection.Input));
            int count = theCmmd.ExecuteNonQuery();

------解决方案--------------------
关键点不是那个ArrayBindCount,而是那个字符串数组的给定,由于最终传说的是字节数组,而字节数组是没有字符串的分割标志的,它不知道数组中每个字符串有多长,那么它就根据字符串数组的长度(ArrayBindCount指定),自动推测每个字符串的长度(定长),但是你给的字符串长短不一(那个“10”是2位的),因此怎么都不可能成功了。