问题是,目前我正在开发某种应用程序,我必须从excel表上传数据,并将其保存到数据库表(oracle)中。我设法通过OracleDataAdapter类
完成此过程 _adapter = new OracleDataAdapter(query, _conn);
_adapter.Update(_dataTable);
然而,需要花费大量时间来保存gridView中加载的数据,例如100000注册表的12分钟。然后我尝试了OracleBulkCopy
,它确实在大约10到15秒内完成了工作,但问题在于它不尊重数据库中的主键。我尝试了一切,但它不尊重约束。
我也尝试通过这样做来自己制作插入方法:
OracleCommand cmdInsert = new OracleCommand();
cmdInsert.CommandText = query;
cmdInsert.Connection = DataAccess._conn;
OracleParameter id_Filtro = new OracleParameter();
cmdInsert.Parameters.Add(id_Filtro);
foreach (DataRow r in _table.Rows)
{
id_Filtro.DbType = DbType.Int32;
id_Filtro.Value = Convert.ToInt32(r["ID_FILTRO"].ToString());
id_Filtro.ParameterName = "id_Filtro ";
cmdInsert.ExecuteNonQuery();
}
我为每个参数做了同样的事情,但是插入所有数据也需要很长时间,大约25分钟左右。我想知道是否有更好的方法来完成这个过程。如果有人能帮助我,我会非常感激。我可以更新帖子以澄清任何查询,请注意我不是数据库或程序员专家。
答案 0 :(得分:0)
OracleBulkCopy似乎使用类似的SQL * Loader概念(Oracle实用程序可以更快地加载批量数据)。此实用程序会使索引和约束为UNUSABLE(除少数检查约束外)并在完成后重新启用它。
因此,在启动加载过程后,您的索引将被标记为不可用。因此缺点是,它绕过主键验证并且容易出现重复。
因此请在加载前尝试验证数据源。程序也可以选择。您甚至可以尝试对临时表进行BULK加载并插入到选择...到目标表。