1

問題はこれです。現在、Excelシートからデータをアップロードし、データベーステーブル(Oracle)に保存する必要があるアプリケーションを開発しています。私は OracleDataAdapter クラスによってこのプロセスを達成することができました

 _adapter = new OracleDataAdapter(query, _conn);
_adapter.Update(_dataTable);

ただし、gridView に読み込まれたデータを保存するには、100000 レジストリで 12 分かかるなど、かなりの時間がかかります。次に、実際に約10〜15秒で作業を行う を試しましたOracleBulkCopyが、データベースの主キーを尊重しないという問題があります。私はすべてを試しましたが、制約を尊重しません。

また、次のようなことを行って、挿入メソッドを自分で作成しようとしました。

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 分ほどかかりました。プロセスを実行するためのより良い方法があるかどうか疑問に思います。誰かが私を助けることができれば、私は本当に感謝しています. 投稿を更新して質問を明確にすることができます。私はデータベースまたはプログラマーの専門家ではないことに注意してください。

4

1 に答える 1

0

OracleBulkCopy は、SQL*Loader (一括データをより高速にロードするための Oracle ユーティリティ) と同様の概念を使用しているようです。このユーティリティは、インデックスと制約を UNUSABLE として作成し (少数のチェック制約を除く)、完了後に再度有効にします。

そのため、読み込みプロセスを開始した後、インデックスは使用不可とマークされます。したがって、欠点は、主キーの検証をバイパスし、重複を許可する傾向があることです。

そのため、ロードする前にデータソースを検証してみてください。手順も選択できます。一時テーブルへの一括ロードを試みて、選択に挿入することもできます...ターゲットテーブルに。

于 2014-02-03T04:48:53.990 に答える