有没有办法强制所有列成为字符串,同时从.csv文件读取数据到DataTable?

问题描述 投票:0回答:1

目前我正在开发一个项目,要求我从.csv文件中读取并将数据导入数据库。它的工作正常,只有一列。在raw / .csv文件中,此字段可以包含int / string。因此,当读取文件时,如果第一列由int组成,那么之后的任何字符串都将被读取。但是如果第一个值碰巧是一个字符串,那么它就会按预期工作。有没有解决方案可以实现我现有的工作解决方案。

string sql = @"SELECT * FROM [" + strFileName + "]";    
DataTable rawDataTable = new DataTable();

using (OleDbConnection connection = new OleDbConnection(connString))
using (OleDbCommand command = new OleDbCommand(sql, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
    adapter.Fill(rawDataTable);
}    

例如,在特定列中:在下面的情况中,当使用上面提到的代码读取时,数据表将显示100,将接下来的两行留空,然后显示500。

Sample Column
-------------
100
SOME TEXT
SOME MORE TEXT
500

但是,如果列恰好与下面的示例相同,则可以通过将整数读取为字符串来正常工作。

Sample Column
--------------
100
SOME TEXT
SOME MORE TEXT
500
c# datatable oledb
1个回答
0
投票

如果您正在使用OleDb文本文件驱动程序,它看起来就像您一样,您可以使用Schema.ini文件告诉它扫描文件中的所有行以确定类型。

例如,如果您的连接字符串如下所示:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;
Extended Properties="text;HDR=Yes;FMT=Delimited";

然后在c:\txtFilesFolder中创建一个名为Schema.ini的文件,如果你的文件名是myfile.csv,那么模式文件的内容将是:

[myfile.csv]
MaxScanRows=0  

就个人而言,这种方法一般不会是我解析文本文件的方式,有很多好的库可以帮助你更好地控制文本文件。

© www.soinside.com 2019 - 2024. All rights reserved.