根据数据找出字段类型

时间:2009-04-07 08:51:00

标签: .net import

我正在从一个系统到另一个系统进行一次性导入例程。第一步是从许多csv文件中导入大量数据。每个csv文件中的第一行是字段名称选项卡分隔。其余的是数据,也是制表符分隔,行用CR分隔。

我编写了一个20行程序,用于创建表并将数据读入sql数据库。我设置了所有仅包含数字数据的字段,其字段名称中的“ID”为INT,其余字段为NVARCHAR(255)。

现在我想对它进行优化,以便查看数据并尝试找出每列中包含的数据类型。有时间,日期,id字段,文本字段和数字字段。

我知道如何做到这一点,它相当容易,但我想知道在这个领域是否有一些工作已完成,并且是否有一些类可以解决这个问题。

找出首选尺寸更难。我想我必须这样做 1.浏览所有行并找出每列的最长数据。 2.有一个查找表,我将例如长度0-50映射为100,长度51-255为255,依此类推。

任何人都有一些明智的输入吗?正如我所说,它并不是特别难以做到的,但是建立一个智能库,以便以后在其他导入场景中使用会很好。

2 个答案:

答案 0 :(得分:1)

我会运行一个预处理阶段 - 分析CSV文件中的数据,以计算nvarchar的合理容量 - 例如,nvarchar(20)或nvarchar(2000)。我想让它打印一个包含每列的示例条目的报告 - 实际上甚至可以生成“create table”SQL语句,您可以在运行之前手动编辑该语句。如果列中的每个条目都以数字格式化,那么将其设为int,依此类推。

作为一次性的事情,我完全希望在运行数据导入之前,您应该先检查您将要创建的每个表。

答案 1 :(得分:1)

你考虑过ADO.NET吗?您可以将数据读入数据集吗?

连接字符串如下所示: “Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\ TxtFile \; Extended Properties ='text; HDR = Yes; FMT = Delimited'” 请注意您需要的HDR = YES。

然后,当您与目录建立连接时,可以使用select语句,如:

“SELECT * FROM data.txt”

还有其他设置可以调整要查看的行数以确定类型等。您可以查看schema.ini文件以手动调整类型。此外,您可以将注册表项HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text设置为: ImportMixedTypes =文本 来自默认的“多数类型”

我还在Excel文件上使用了SQL Import表(在Excel中打开后保存csv文件后)。这也可以。没有什么能够完美地工作 - 有时我仍然觉得使用一些手动编码更容易并且自己检查列数据。