Excel ファイルからデータをアップロードするために .NET Web アプリケーションから DB とのインターフェイスを作成する方法に関するベスト プラクティスまたはアイデアを探しています。エラー発生時にロードを停止する仕組みを採用しています。
私はこれまでこの種の要件に対処する必要がなかったので、どんな助けも素晴らしいでしょう!
ありがとう
過去にうまくいった次のアプローチを試してみます。
データをアップロードし、検証チェックに失敗した場合はフラグを立てる必要があります。実際にデータをロードするには、いくつかのオプションがあります。
.
public void Load() {
bool OK = File.Exists(_filename);
if (OK) {
string sql = String.Format("Select * from {0}", FileName);
OleDbConnection csv = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand(sql, csv);
OleDbDataReader rs = null;
SqlConnection db = null;
SqlCommand clear = null;
SqlBulkCopy bulk_load = null;
try {
// Note two connections: one from the csv file
// and one to the database;
csv = new OleDbConnection();
csv.ConnectionString = ConnectionString;
csv.Open();
cmd = new OleDbCommand(sql, csv);
rs = cmd.ExecuteReader();
// Dung out the staging table
db = // [Create A DB conneciton Here]
clear = new SqlCommand("Truncate table Staging", db); // Left to the reader
clear.ExecuteNonQuery();
// Import into the staging table
bulk_load = new SqlBulkCopy(db);
bulk_load.DestinationTableName = Destination; // Actually an instance var
bulk_load.WriteToServer(rs);
} catch (Exception ee) {
string summary = ee.Message;
string detail = ee.StackTrace;
//Notify(DisplayType.error, summary, detail);
} finally {
if (rs != null) rs.Close();
if (csv != null) csv.Close();
if (bulk_load != null) bulk_load.Close();
}
}
}
DB のデータ整合性が重要な場合は、エラーのあるデータや DB の検証要件を満たさないデータのインポートを許可しないでください。
これらは Excel ファイルであるため、別のインターフェイスを使用してデータを修正しようとする代わりに、ユーザーが Excel ファイル内のデータを修正するのは十分に簡単なはずです。エラーメッセージが問題のあるフィールドにユーザーを誘導し、何が間違っているかを明確に説明していることを確認してください.
DB に Excel ファイルをブロブとして配置しますか? または、ファイルを解析して、ファイル内のレコードをデータベースに入れますか?
私は後者であると推測しています。
ユーザーとして、エラーを修正して再試行できるように、エラーの内容を知るオプションが必要です。再試行の方法は、アップロードするデータの量によって異なると思います。
ハイブリッド ソリューションを試してみたいと思います。エラーが数個しかない場合は、それらのエラーを修正する画面を表示して、ユーザーがすぐに先に進むことができるようにします。大量のエラーがある場合は、それを実行して、ユーザーにもう一度やり直してもらう必要があります。
DBまで。アップロードがチェックされて「実際の」データが取得されるまで別のテーブルを作成するか、 UploadUniqueId 列を作成して、アップロードを大騒ぎせずにロールバックできるようにします。
UploadUniqueId = 'GUID' の tableName を削除します