在从 .csv 文件读取数据到 DataTable 时,有没有办法强制所有列为字符串?
Is there a way to force all the columns to be strings while reading data from a .csv file into a DataTable?
目前我正在做一个项目,需要我从 .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
如果您正在使用 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
就个人而言,这种方法通常不是我解析文本文件的方式,有很多好的库可以这样做,这会给你更多的控制权。
目前我正在做一个项目,需要我从 .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
如果您正在使用 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
就个人而言,这种方法通常不是我解析文本文件的方式,有很多好的库可以这样做,这会给你更多的控制权。