我们正在处理这个项目,有时我们需要验证来自 2 个不同的 Access(mdb) 文件的数据。此验证包括基于作为“主键”的列比较这两个文件的条目,以验证其他列的值是否从文件更改为另一个。
我的同事编写了一些代码将这两个文件中的数据导入到 Oracle 表中,并使用视图中的 sql 连接进行验证。
问题是:文件有太多数据,需要 50 多分钟才能将它们加载到 Oracle 表中。
有没有更好的方法来制作这个例程?无需将所有数据导入数据库?
编辑
这是我们用来导入数据的代码(不是我写的):
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);
}
}