Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将大型文本文件导入SQL Server数据库_C#_Sql Server 2008 R2 - Fatal编程技术网

C# 将大型文本文件导入SQL Server数据库

C# 将大型文本文件导入SQL Server数据库,c#,sql-server-2008-r2,C#,Sql Server 2008 R2,我对C#非常陌生(不过对VB很有经验),我想将一些非常大的管道(|)分隔文件导入我的SQL Server数据库 到目前为止,我所做的是创建一个C#项目(使用SharpDevelop)并添加代码来扫描目录中具有特定名称的文本文件,并根据文件名确定SQL Server中的目标表。我还创建了一个SQL连接,它运行时没有错误,但这就是我所能做到的 因此,我想我应该建议如何最好地将这些类型的文件(其中一些大小从几千KB到几乎2GB)导入SQL Server。文本文件也有一个标题行的列名和一些我想格式化为日

我对C#非常陌生(不过对VB很有经验),我想将一些非常大的管道(|)分隔文件导入我的SQL Server数据库

到目前为止,我所做的是创建一个C#项目(使用SharpDevelop)并添加代码来扫描目录中具有特定名称的文本文件,并根据文件名确定SQL Server中的目标表。我还创建了一个SQL连接,它运行时没有错误,但这就是我所能做到的

因此,我想我应该建议如何最好地将这些类型的文件(其中一些大小从几千KB到几乎2GB)导入SQL Server。文本文件也有一个标题行的列名和一些我想格式化为日期的列。我还想在导入之前先验证表是否存在,以便知道是否要创建它


我应该使用某种文件读取器,以那种方式逐行读取文件,还是读取整个文件?只是不确定最好的方法。

看看如何使用缓冲流读取中的大型文本文件。在这之后,拆分管道并调用SQL函数应该相对容易。

看看如何使用缓冲流在中读取大型文本文件。在此之后,拆分管道并调用SQL函数应该相对容易。

将是导入原始文本数据的最快方法。SSIS是另一个选项,但它有一些开销,可以逐行读取数据并通过转换器运行。

将是导入原始文本数据的最快方法。SSIS是另一种选择,但它有一些开销,需要逐行读取数据并通过转换器运行。

您必须使用C#并自己编写吗?您可以查看SSIS(集成服务),它提供了很多功能,可以非常轻松地处理此类情况。要将大量数据导入sql server,我以前使用过。我建议您在sql server中创建一个存储过程。在过程中使用文件名、目标表等参数进行大容量插入/编辑SSI也很好,主要取决于您的数据类型您必须导入的频率以及是否总是相同的格式这是一次性导入还是连续的过程?如果一次导入,则可能只使用SSMS中数据库上可用的导入数据任务。如果您需要重复执行此导入过程,我会按照marc_的建议查看SSI。我没有访问SSI的权限,但如果我有访问权限,那将是一件好事。这将是一个我们在获得新文件时反复进行的过程,这就是为什么我想在C#中制作一些东西。您应该在服务器端执行此操作,并立即导入整个文件。客户端的性能会很差,在错误处理方面会遇到更多麻烦。您还可以考虑一个桥,它意味着将文件导入到一个只有两列的表中(line_no int,line varchar)。然后分别进行解析。你必须使用C语言并自己编写吗?您可以查看SSIS(集成服务),它提供了很多功能,可以非常轻松地处理此类情况。要将大量数据导入sql server,我以前使用过。我建议您在sql server中创建一个存储过程。在过程中使用文件名、目标表等参数进行大容量插入/编辑SSI也很好,主要取决于您的数据类型您必须导入的频率以及是否总是相同的格式这是一次性导入还是连续的过程?如果一次导入,则可能只使用SSMS中数据库上可用的导入数据任务。如果您需要重复执行此导入过程,我会按照marc_的建议查看SSI。我没有访问SSI的权限,但如果我有访问权限,那将是一件好事。这将是一个我们在获得新文件时反复进行的过程,这就是为什么我想在C#中制作一些东西。您应该在服务器端执行此操作,并立即导入整个文件。客户端的性能会很差,在错误处理方面会遇到更多麻烦。您还可以考虑一个桥,它意味着将文件导入到一个只有两列的表中(line_no int,line varchar)。然后分别进行解析。所以我已经让它工作了,我唯一的抱怨是它运行得非常慢。一个3MB的文本文件表格~20分钟导入。有没有其他方法可以加快速度?现在我只是一次读一行,然后插入它。也许我可以一次读50行,然后试着插入,不确定。你是对的。单个insert语句将花费很长时间。查看SqlBulkCopy类,将插入设置为成批运行—因此我已经让它工作了,我唯一的抱怨是它运行非常慢。一个3MB的文本文件表格~20分钟导入。有没有其他方法可以加快速度?现在我只是一次读一行,然后插入它。也许我可以一次读50行,然后试着插入,不确定。你是对的。单个insert语句将花费很长时间。查看SqlBulkCopy类以设置插入以成批运行-