题
我正在寻找有关如何使用.NET Web应用程序创建DB的界面以从Excel文件上传数据的任何最佳实践或想法我使用一种机制,该机制在发生错误时停止负载。
我以前从未处理过此类要求,所以任何帮助都会非常好!
谢谢
解决方案
如果数据库中的数据完整性很重要,请勿允许导入有错误或不符合数据库验证要求的数据。
由于这些是Excel文件,因此用户应该很容易更正Excel文件中的数据,而不是尝试使用其他界面来修复数据。只需确保错误消息将用户指向哪个字段是问题并清楚地解释错误。
其他提示
我会尝试以下在过去运作良好的方法。
- 允许用户上传文件,将其放在磁盘上。
- 将文件的结果绑定到某个网格(您可以使用传统的Connection / Command对象使用ODBC / OLE DB连接到Excel文件)。
- 根据一组业务规则将验证应用于网格中的行(excel数据通常很脏)。
- 允许用户更新网格中的值并更正验证问题。
- 如果所有数据都是犹太教并且用户对此感到满意,则会在交易中执行批量插入。
- 如果有什么“坏”的话发生回滚并提供一些用户反馈。 醇>
您应该上传数据,然后在验证检查失败时对其进行标记。为了实际加载数据,您有以下几种选择:
- ADO.NET大量负载API-使用散装负载API将其放在登台表中。下面的摘要显示了打开.CSV文件并将其加载到登台表中的过程。
.
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();
}
}
}
- 使用BCP或SSI直接从电子表格或.CSV文件导入它。
你想把excel文件作为blob放在DB中吗?或者您是否要解析文件并将文件中的记录放入db?
我假设它是后者。
作为用户,我希望能够知道错误是什么,因此我可以修复它们并重试。我想我再试一次取决于我上传的数据量。
我尝试做一个混合解决方案..如果只有少数错误显示屏幕来纠正这些错误,那么用户可以快速前进。如果有大量错误,您应该可以使用并让用户重新尝试。
至于DB。要么有一个单独的表格上传,直到他们被检查并获得你的“真实”和数据,或者有一个UploadUniqueId列,这样您就可以毫不费力地回滚任何上传。
删除tableName,其中UploadUniqueId ='GUID'
不隶属于 StackOverflow