私たちはこのプロジェクトに取り組んでおり、ある時点で 2 つの別個の Access(mdb) ファイルからのデータを検証する必要があります。この検証では、「主キー」である列に基づいてこの 2 つのファイルのエントリを比較し、他の列の値がファイルから別のファイルに変更されているかどうかを確認します。
私の同僚は、2 つのファイルから Oracle テーブルにデータをインポートするコードを書き、ビュー内で SQL 結合を使用して検証を行いました。
問題は、ファイルのデータが多すぎるため、Oracle テーブルにロードするのに 50 分以上かかることです。
このルーチンを作成するためのより良いアプローチはありますか? すべてのデータをデータベースにインポートせずに?
編集
データをインポートするために使用しているコードは次のとおりです (私が書いたものではありません)。
protected void InsereDadosTemp()
{
try
{
String vMesAno = ReportParameter.ReportData.Parameters.Item("pMesAnoCompetencia").Value;
Hashtable hashMesAno = new Hashtable();
hashMesAno.Add(vMesAno, 1);
hashMesAno.Add(MesAnterior(vMesAno), 2);
OleDbConnection objConnOracle = new OleDbConnection(ConfigurationManager.ConnectionStrings["Main"].ToString());
objConnOracle.Open();
OleDbCommand objCmdPciReport = new OleDbCommand("DELETE FROM ZBRICAGEM", objConnOracle);
objCmdPciReport.ExecuteNonQuery();
foreach (DictionaryEntry obj in hashMesAno)
{
string vConnectionString = MontaConnectionString(obj.Key.ToString());
OleDbConnection objConnAccess = new OleDbConnection(vConnectionString);
objConnAccess.Open();
OleDbCommand objCmdAccess = new OleDbCommand("SELECT * FROM TEST where EQUIPE NOT IN ('ONCO', 'DERMA', 'AROMA', 'SOMA', 'IDADE', 'HORMONIO')", objConnAccess);
OleDbDataReader reader = objCmdAccess.ExecuteReader();
if (reader.HasRows)
{
objCmdPciReport = new OleDbCommand("INSERT INTO ZBRICAGEM (ID_BRICK, BRICK, SETOR, EQUIPE, NOME_POOL, BRICKS_UF, BU, ARQUIVO ) Values (" +
"BRICKS_SEQ.NEXTVAL, :p1, :p2, :p3, :p4, :p5, :p6, :p7)", objConnOracle);
objCmdPciReport.CommandType = CommandType.Text;
while (reader.Read())
{
objCmdPciReport.Parameters.Clear();
objCmdPciReport.Parameters.Add(new OleDbParameter(":p1", OleDbType.VarChar, 100)).Value = reader["BRICK"];
objCmdPciReport.Parameters.Add(new OleDbParameter(":p2", OleDbType.VarChar, 100)).Value = reader["SETOR"];
objCmdPciReport.Parameters.Add(new OleDbParameter(":p3", OleDbType.VarChar, 100)).Value = reader["EQUIPE"];
objCmdPciReport.Parameters.Add(new OleDbParameter(":p4", OleDbType.VarChar, 100)).Value = reader["NOME_POOL"];
objCmdPciReport.Parameters.Add(new OleDbParameter(":p5", OleDbType.VarChar, 100)).Value = reader["BRICKS_UF"];
objCmdPciReport.Parameters.Add(new OleDbParameter(":p6", OleDbType.VarChar, 100)).Value = reader["BU"];
objCmdPciReport.Parameters.Add(new OleDbParameter(":p7", OleDbType.VarChar, 100)).Value = Path.GetFileName(objConnAccess.ConnectionString);
objCmdPciReport.ExecuteNonQuery();
}
}
objConnAccess.Close();
}
objConnOracle.Close();
}
catch (Exception ex)
{
throw new Exception("Erro durante a importação de Bricagem: " + ex.Message);
}
}