我正在阅读csv文件并创建数据集。
string MyPath = System.IO.Path.GetDirectoryName(Filename);
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MyPath + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";
//string CmdText = "select * from JDL-NurseryParts" + System.IO.Path.GetFileName(Filename);
string CmdText = "select * from ABC";
OleDbConnection Con = new OleDbConnection(ConnectionString);
OleDbDataAdapter adptr = new OleDbDataAdapter(CmdText, Con);
DataSet Ds = new DataSet();
adptr.Fill(Ds);
return Ds;
我收到错误“语法错误附近”。当我打开那个csv文件时,它包含workedsheet。
文件名 - ABC
工作表名称 - ABC
我正在使用c#
答案 0 :(得分:2)
在我目前的项目中,我使用File Helpers,我没有失望!
编辑:作为一个简单的例子,这里是我正在使用的一个类。一切都与属性有关。 (样本在VB.Net中,但你会得到这个想法)
<DelimitedRecord(";")> _
<IgnoreFirst(1)> _
<IgnoreEmptyLines()> _
Public Class ClientsClass
<FieldConverter(ConverterKind.Date, "dd/M/yyyy"), FieldQuoted(QuoteMode.OptionalForBoth)> Public DateField As Date
<FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public ClientCountry As String
<FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public AccountId As String
<FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public Name As String
<FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public FNumber As String
End Class
所以基本上,你创建一个类,其中每个字段都是你的CVS文件中的一个字段(顺序很重要),然后你添加了一些属性,它们将告诉必须对字段应用什么样的处理(例如修剪,转换, ...)。您还可以添加类属性,例如<DelimitedRecord(";")>
,它告诉文件中使用哪个分隔符,或IgnoreFirst(1)
,它告诉引擎不解析第一行。每个属性都在他们的文档中进行了解释,网站上有许多样本供您学习。
然后,将文件解析为类非常简单:
Dim filePath as string = "Path to your file.csv"
Dim fhe As New FileHelperEngine(Of ClientsClass)
Dim vals as ClientClass() = CType(fhe.ReadFile(filePath), ClientClass())
你得到一个数组,每个解析的行包含1个ClientClass
个对象。
请注意,他们还构建了一个工具,可以帮助您创建课程,可以在他们的网站上下载。
答案 1 :(得分:0)
我认为你的CmdText字符串可能有问题。试试
string CmdText = "SELECT * FROM [" + System.IO.Path.GetDirectoryName(Filename) + "]";
我使用下面的类来读取CSV文件,它似乎运行良好(返回一个DataTable,但你可以轻松地返回一个DataSet:
public System.Data.DataTable GetDataTable(string strFileName)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"");
conn.Open();
string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]";
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
System.Data.DataSet ds = new System.Data.DataSet("CSV File");
adapter.Fill(ds);
return ds.Tables[0];
}
希望它有所帮助: - )