与Excel,SQL的互动,什么是最好的(最快,最强大)?

Sharpdunce.

新成员
加入
2014年9月10日
消息
2
编程经验
Beginner
大家好,

我正在努力在一家公司,我一直是任务制作命令行C#程序:
- 从两个Excel文件中获取数据
- 错误检查和标准化后将其转换为SQL友好格式
- 检查数据库是否更改,删除和新瘾
- 在一个事务中将信息整合到服务器中

它必须相对快速且强大(错误检查,无崩溃等)。 Excel床单将有几千个(5岁以下)条目,这些条目大多在这里和那里的变化和添加。

对于我一直在研究的大部分时间,似乎使用ADO.NET库和函数似乎是一种做好方法。我制作了一个测试程序,将一个简单的Excel表转换为DataTable对象,并将其上传到我在SQL数据库中制作的表,但它非常简单,没有错误检查和验证。
您认为最佳方法是什么?我很漂亮,软件开发缺乏经验,我没有通过常规班级作业做任何事情。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,714
地点
悉尼,澳大利亚
编程经验
10+
使用ADO.NET读取Excel数据肯定是一个可行的选项。它确实有几个GOTCHAS,例如,它只使用前8行以每列中的数据类型进行最佳猜测。这可能是一个问题如果数据在这些行中混合或空。

验证的细节将取决于数据和业务规则的细节。您基本上是NEE编写一种方法,返回每个规则的布尔,然后循环通过表中的行并调用每个方法。如果方法返回false,则验证失败。那是该怎么做,例如,失败了整个文件或那行。

要保存数据,您有两个选项:

1.将SQL Server中的所有数据检索到DataTable中,根据其他DataTable的内容对其进行更改,然后保存回SQL Server。

2.循环通过原始DataTable的行,并将其直接进行更改为每个数据库。

第一个选项具有首先检索所有数据的开销,但除此之外会更有效。
 

tumatauenga.

成员
加入
2014年8月30日
消息
6
编程经验
3-5
在c#中
(取决于结构,可以足够了解1个DataTable)
1个可用于Excel 1的DataTable 1
1个DataTable for Excel 2

在插入到DataTable之前,DataTable在DataTable上的DataValidation(s)上

这一步骤应该在一些毫秒内完成

dataveration后,您可以将DataTable的数据覆盖到SQL Server(http://msdn.microsoft.com/de-de/library/ex21zs8x(v=vs.110).aspx)
这是迄今为止将MassData写入服务器的最快方法(120 MB在2秒内写入或更快...取决于您的网络)

如果您需要从Excel验证数据VS SQLDATA(已删除的记录可能有点难以找到,但更改和新记录很简单)U应该(在上面的步骤 - >Bulkcopy)将数据插入临时或导入表(如果您通过从表中选择数据来检查数据,则应使用将在Bulkcopy步骤之前截断的导入表)

之后,你可以在服务器上执行合并
sqlcommand mycommand = new sqlcommand("yourmergestatementoeshere.", conn);
mycommand.executenonscalar(http://msdn.microsoft.com/de-de/lib...nt.sqlcommand.executenonquery(v=vs.110).aspx)

如果您需要跟踪数据库内的更改(更新,插入数据)查看 合并(Transact-SQL) 这解释了合并查询
(并注意Th Output子句,您可以使用它来跟踪更改

总而言之(根据SQL表中保存的整个数据),这些步骤应为该少量数据取低于2秒。

我每天都在那样换来它(包括一个更复杂的datavalidation)数百个文本文件

这么长的故事短暂:
- Excel - > DataTable
- DataTable - > Validation
- SQL Server上的导入表
- Dulkcopy DataTable到SQLServer ImportTable
- 使用当前数据来将导入的In.RupgeTable Merge


但应该有一个更快/更好的方法 - >SSIS包(无需控制台应用程序,它将在您的服务器上完全运行)
我们以文本格式提供的千兆字节(无论是文本或excel无关紧要,您可以在SSI中作为数据源一起使用),并在几秒钟内使用SSIS包导入它们,
完全自动化,它需要同时编写SSIS包,而不是编写控制台应用程序。
但它利用SQL Server的优势比.NET更好(但更难调试(我的个人意见)
 

Sharpdunce.

新成员
加入
2014年9月10日
消息
2
编程经验
Beginner
谢谢家伙,我很欣赏它。我会展望所有这些,并很快进入实施。

我忘了提到上面我将C#DataTable的方式与Sqlkcopy一起推,它似乎是在一次性中完成所有操作的最佳方式,它的构造函数也可以采用交易对象所以我可以确保副本是原子(其中一个要求)。

我还需要记录错误(例如:缺失或缺失的excel文件中缺少的列值),是否有一个易于使用的库,我可以使用?我以前从未做过任何伐木,因为到目前为止,我的大学的作业有点脱节,我没有曝光更全面的软件开发。

编辑:数据将大约10-11列,所有这些字符串。
 
Last edited:
最佳 底部