C# 导入多格式分隔文件

C# 导入多格式分隔文件,c#,sql-server,ssis,sql-server-2016,C#,Sql Server,Ssis,Sql Server 2016,我需要将一个文件导入几个数据库表。该文件同时包含多种格式,如下所示: 901 902|1|Id|Name|Age 902|2|Id|Region|Address 902|3|Id|ProductName|ProductType|Price 903 1||Adam Sandler|40 1||Phil Collins|50 1||Fred Mason|22 2||Southwest|4000 Cactus Ln. 2||Northwest|5000 Seahawk Ln. 3||Surf boar

我需要将一个文件导入几个数据库表。该文件同时包含多种格式,如下所示:

901
902|1|Id|Name|Age
902|2|Id|Region|Address
902|3|Id|ProductName|ProductType|Price
903
1||Adam Sandler|40
1||Phil Collins|50
1||Fred Mason|22
2||Southwest|4000 Cactus Ln.
2||Northwest|5000 Seahawk Ln.
3||Surf board|recreation|$30.00
实际上,此文件的“标题”(以“902”为前缀的行)指示包含哪些类型的文档(文档类型1、2和3)以及每个文档具有哪些列名/数量。然后该文件提供实际数据(从“903”指示符之后开始)

我需要使用SSIS(SQL Server 2016)来导入数据,但SSIS似乎没有任何内置功能。所以我想听听关于如何处理这个问题的建议

现在我认为我应该。也许这种自定义方法将允许我定义一个doc type属性,该属性指示我要导入的文档类型(#1、#2或#3),然后我的自定义C代码将完成繁重的工作

这是一个好方法吗?有更好的方法吗?我对C#很有信心。

太长了,无法评论

在上传之前,我会使用C#或Python或批处理或任何东西将它们分割成自己的文件

例如,一个文件用于#1,一个文件用于#2,等等。。。我给出此建议的原因是,您只需要在任何给定的表中插入单个文档类型(如标题所述)。因此,在导入时,最好只在文件中插入表所需的数据。事实上,我想不出一个干净的方法来做这件事。因此,您需要将文件1导入到表1中,将文件2导入到表2中,依此类推


需要注意的是,如果您不想使用SSI,您不必为此使用SSI,尽管它可以被使用。

通常,我使用批量作为行加载

    CREATE TABLE #FileContent (Line varchar(2000));
    SET @sql='BULK INSERT #FileContent FROM '''+@FileFullName+'''  WITH (ROWTERMINATOR ='''+CHAR(10)+''')'
    PRINT @sql
    EXEC(@sql)
然后使用split函数将行数据拆分为列 将每个格式行放入不同的表中。

。。。导入数据库中的“空”表,然后运行执行
的语句,其中SUBSTRING(列,1,1)=“1”