插入代码如下,前面已经生成了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%有序,就一定要自己排序,否则结果集的顺序是不确定的。
------解决思路----------------------
如果这张表结构不能变,也可以变通一下,建另一张表通过关联存储一个顺序号,实属下策.