System.IndexOutOfRangeException: 索引超出了数组界限

场景:急问:System.IndexOutOfRangeException: 索引超出了数组界限解决方案

急问:System.IndexOutOfRangeException: 索引超出了数组界限
最近需要从Oracle库中将大量(百万级)的数据用程序导入到mysql中

程序每次跑到一百万多一点就出现这样的异常,不知道如何解决.

主要代码很简单,请大家帮忙看看,如何解决,谢谢.


                public   void   Oracle2Mysql()
                {
                        GetConn();
                        GetMySqlConn();

                 
                        OracleCommand   cmd   =   conn.CreateCommand();
                        cmd.CommandText   =   "select   s.email,s.createdate,s.iforder,s.updatedate   from   s_subscriber   s ";

                        conn.Open();
                        mysqlconn.Open();

                        OracleDataAdapter   oracleDAP   =   new   OracleDataAdapter(cmd);
                        DataSet   ds   =   new   DataSet();
                        oracleDAP.Fill(ds,   "table ");
                        conn.Close();
                       
                        try
                        {
                                foreach   (DataRow   dr   in   ds.Tables[0].Rows)
                                {
                                       
                                        string   EmailSupplier   =   GetEmailSupplier(dr[ "email "].ToString());
                                        string   EmailSupplierCode   =   GetEmailSupplierCode(EmailSupplier.ToString());

                                        ArrayList   para   =   new   ArrayList();
                                        para.Add(dr[ "email "].ToString());
                                        para.Add(EmailSupplierCode.ToString());
                                        para.Add(dr[ "iforder "].ToString());
                                        para.Add(dr[ "createdate "].ToString());
                                        para.Add(dr[ "updatedate "].ToString());
                                        InputData(para);
                                        Console.WriteLine( "Email:{0} ",   para[0]);
                                        Console.WriteLine( "EmailSupplierCode:{0} ",   EmailSupplierCode.ToString());
                                        Console.WriteLine( "IfOrder:{0} ",   para[2]);
                                        Console.WriteLine( "CreateDate:{0} ",   para[3]);
                                        Console.WriteLine( "UpdateDate:{0} ",   para[4]);
                                        Console.WriteLine( "************* ");

                                }
                                ds.Clear();
                                ds.Dispose();
                                mysqlconn.Close();
                                Console.WriteLine( "Complete ");
                        }
                        catch   (Exception   ex)
                        {
                                Log(ex.ToString());
                                Console.WriteLine(ex.Message);
                        }

                }

------解决方案--------------------
可以试试分多次导出,一次导出1000条
------解决方案--------------------
从上面的代码看不出有什么问题,请贴InputData(para);的代码
ArrayList para = new ArrayList();//优化:这句话应放在循环外面

------解决方案--------------------
重新生成应该没什么问题,当然你也可以用外面new里面clear的方法,但觉得问题不是在那,因为你有try catch如果是那里面报出的异常应该在CATCH里
------解决方案--------------------
一种有效的方法是分多次取数据,每次只取有限行,比如1万行,不仅效率高,吃内存还小。
只需在select语句后加上行数控制,如:rownumber> 100 and rownumber <201
相信此法能解决,为测试,如果可以说一声。
------解决方案--------------------
你首先要找出错误行, 可以使用你的日志功能来找出(取消try/catch)
------解决方案--------------------
可以试试分多次导出
------解决方案--------------------
这个根本不是程序的问题,你看一下MySQL和Oracle在字段类型定义方面的差异,是在你的第100多万行时,从Oracle中获得的数据在写入MySQL时,数组溢出,比如MySQL的字段长度不够,或者数值类型的长度与Oracle中的长度不匹配之类的。