当前位置: 代码迷 >> C# >> datatable通过OracleDataAdapter插入oracle表顺序混乱的有关问题
  详细解决方案

datatable通过OracleDataAdapter插入oracle表顺序混乱的有关问题

热度:52   发布时间:2016-05-05 03:34:24.0
datatable通过OracleDataAdapter插入oracle表顺序混乱的问题
本帖最后由 qibebt 于 2015-05-31 11:11:31 编辑
插入代码如下,前面已经生成了DataSet 。由于记录比较多,需循环多次调用MultiInsertData,结果是oracle表里面记录的顺序完全混乱了。
断点查看第一次循环dtTemp (Datatable)记录顺序是对的,oracle表记录顺序也是对的。
从第二次循环开始,oracle表记录顺序就乱了(dtTemp记录顺序还是对的)。
这个,我需要oracle表记录顺序与前面的DataSet 记录顺序一致,怎么解决呢?多谢指点。
oracle表查询 order by rowid,就是乱的。
表结构也固定,不能修改了


 public static bool MultiInsertData(DataSet ds, string Columns, string tableName, string connectionString)
        {
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                string SQLString = string.Format("select {0} from {1} where rownum=0", Columns, tableName);
                using (OracleCommand cmd = new OracleCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        OracleDataAdapter myDataAdapter = new OracleDataAdapter();
                        myDataAdapter.SelectCommand = new OracleCommand(SQLString, connection);
                        myDataAdapter.UpdateBatchSize = 0;
                        OracleCommandBuilder custCB = new OracleCommandBuilder(myDataAdapter);
                        System.Data.DataTable dt = ds.Tables[0].Copy();
                        System.Data.DataTable dtTemp = dt.Clone();

                        int times = 0;
                        for (int count = 0; count < dt.Rows.Count; times++)
                        {
                            for (int i = 0; i < 400 && 400 * times + i < dt.Rows.Count; i++, count++)
                            {
                                dtTemp.Rows.Add(dt.Rows[count].ItemArray);
                            }
                            myDataAdapter.Update(dtTemp);
                            dtTemp.Rows.Clear();
                        }

                        dt.Dispose();
                        dtTemp.Dispose();
                        myDataAdapter.Dispose();
                        return true;
                    }
                    catch (System.Data.OracleClient.OracleException E)
                    {
                        connection.Close();
                        return false;
                    }
                }
            }
        }
------解决思路----------------------
数据库表中的数据本身就是无序的。要想Select出来的数据100%有序,就一定要自己排序,否则结果集的顺序是不确定的。
------解决思路----------------------
如果这张表结构不能变,也可以变通一下,建另一张表通过关联存储一个顺序号,实属下策.
  相关解决方案