kie*_*iev 10 c# architecture asp.net import .net-3.5
我正在使用c#启动asp.net visual studio 2008/SQL 2000(将来的2005)项目.
对我来说棘手的部分是现有的数据库模式经常更改,导入文件列都必须与现有的数据库模式匹配,因为它们可能不是列名称上的一对一匹配.(有一个查找表,它提供了我将使用的列名称的表模式)
我正在探索不同的方法来解决这个问题,需要一些专家建议.是否有任何现有的控件或框架可用于执行此操作?
到目前为止,我探索了FileUpload .NET控件,以及一些第三方上传控件来完成上传,如SlickUpload,但上传的文件应<500mb
下一部分是读取我的csv/excel并解析它以显示给用户,以便它们可以与我们的db模式匹配.我看过CSVReader和其他人,但是因为我需要支持不同的版本,所以更难以实现.
实质上执行此导入的用户将从此导入文件中插入和/或更新多个表.还有其他更先进的要求,如记录匹配,但预览导入记录,但我希望首先了解如何执行此操作.
更新:我最终使用csvReader和LumenWorks.Framework上传csv文件.
查看优秀的FileHelpers库 - 有一篇关于它的CodeProject文章,它在这里托管.
它是纯粹的C#,它可以导入任何平面文件,CSV,它也可以处理Excel.导入是完全可配置的 - 您可以定义要跳过的分隔符,行和/或列等内容 - 许多选项.
我已成功地在各种项目中使用它,它只是完美无缺 - 非常值得推荐.
您可以轻松地在Excel或CSV文件上创建IDataReader(请参阅http://support.microsoft.com/kb/316934).
您使用SQL Server作为数据库引擎吗?如果是这样,您可以使用SqlBulkCopy类(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx)有效地获取IDataReader,根据需要映射列,并存储结果在您的数据库中.
我使用 LumenWorks.Framework 中的 csvReader 将 csv 文件上传并导入到内存中的 SQL 表和 DataTable 中,这是我根据导入的列创建的。
\n\n我还让用户映射 ui 中的字段,然后通过将每条记录标记为插入/更新/错误来验证和准备要导入的数据。然后,我为每个受影响的表创建/填充强类型数据集,并为 Enterprise Library UpdateDataset() 方法构建插入/更新查询。
\n\n然后我提交事务以插入/更新数据库。\xe2\x80\x93
\n\n该映射是一个包含 4 列的网格。(导入字段名称、目标表、目标字段名称、忽略、匹配状态),目标表和字段名称根据所选表选择刷新。我动态填充选择。如果找到匹配项,则最初选择的组合将填充 1 个值,否则请选择。忽略允许用户忽略该字段。匹配状态是字段是否已自动映射
\n