好的,这开始是将客户数据导入数据库的一项非常简单的任务。下面的脚本将所有数据加载到内存中,然后允许操作。
string ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + FileLoc + "\"; Extended Properties=\"text;HDR=Yes;FMT=Delimited(,)\"";
using (OleDbConnection conn = new OleDbConnection(ConString))
{
using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM DataInput.csv", conn))
{
conn.Open();
using (OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
int RowNumber = 0;
while (dr.Read())
{
if(RowNumber==0)
{
for (int i = 0; i < dr.FieldCount; i++)
{
TitleData.Add(new CSVTitleData() {ColumnID = i,ColumnName = dr.GetValue(i).ToString()});
}
}
else
{
var DataToInsert = new List<CSVData>();
for (int i = 0; i < dr.FieldCount; i++)
{
if (i == 8)
{
var A = dr.GetValue(i);
Console.WriteLine(A.GetType().ToString() + " - " + i);
}
DataToInsert.Add(new CSVData(){ColumnID = i,Value = dr.GetValue(i).ToString()});
}
Content.Add(DataToInsert);
}
RowNumber++;
}
}
}
}
这样可以正常工作,直到有
这样的数据4950
4951
4952
4998
2024
4176
7025-1
RVAC010
RVAC011
4945
4946
4947
4948
Excel尝试变得聪明并将每个字段作为Int读取。结果是那些字母被读作DBNull。
现在我已经做了一些阅读,很多人都有这个问题,但没有可靠的解决方案。一个可能的解决方案是创建一个Scheme.ini我想知道是否有人可以帮助我确切的格式?
或许在CSV中阅读更容易?
答案 0 :(得分:4)
我对此有相同的经验....我在codeproject找到了很棒的库来读取CSV文件:
http://www.codeproject.com/KB/database/CsvReader.aspx
库可以处理所有内容,例如正确解析CSV,因此您不必担心这些问题。它非常易于使用,数据可以通过DataTable返回。
它已成为我的代码库的重要组成部分我强烈建议您查看它。
答案 1 :(得分:2)
我建议放弃Excel,并使用符合LINQ to CSV的内容来处理您的处理。您可以消除对Excel的依赖性,直接控制打字,以及更轻的引导权重。
答案 2 :(得分:1)
我最喜欢的读取文件的方法是使用外部库 http://www.filehelpers.com/
说明强>
FileHelpers是一个免费且易于使用的.NET库,用于从文件,字符串或流中的固定长度或分隔记录中导入/导出数据。
它拥有一切,厨房下沉,但仍然很小..
在asp.net应用程序中运行excel绝不是一个好主意,而且微软也禁止运行excel。
你总是可以尝试ODBC,它有一种方法可以为一个微软唯一的解决方案指定带有ini文件的布局,尽管ODBC的日期已编号