请帮忙!
我正在尝试将数据从csv导入到网格中,然后将数据保存到数据库中......问题是无论我尝试什么,这些行都是读垃圾或某些我不知道的格式。这是我第一次尝试导入我的asp.net Gridview,但它无法正常工作。如果有人能以正确的方式指导我,我会很感激!
这就是我所做的:
private object ReadToEnd(string filePath)
{
DataTable dtDataSource = new DataTable();
string[] fileContent = File.ReadAllLines(filePath);
if (fileContent.Count() > 0)
{
string[] columns = fileContent[0].Split(',');
for (int i = 0; i < columns.Count(); i++)
{
dtDataSource.Columns.Add(columns[i]);
}
for (int i = 1; i < fileContent.Count(); i++)
{
string[] rowData = fileContent[i].Split(',');
dtDataSource.Rows.Add(rowData);
}
}
gvTest.DataSource = dtDataSource;
gvTest.DataBind();
}
我只需要整个csv中的一列是SerialNo。收到正确的信息后,我会在插入数据库(sql)之前绑定其余的数据......
这就是它正在阅读的内容:
在读取数据后,它给出了一条错误消息:“输入数组比此表中的列数长。”
我尝试过另一种方式:
private static DataTable GetDataTabletFromCSVFile(string path)
{
DataTable csvData = new DataTable();
csvData.Columns.Add("SerialNo", typeof(string));
// csvData.Columns.Add("MachineDetailsRef", typeof(int));
try
{
using (TextFieldParser csvReader = new TextFieldParser( path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn serialno = new DataColumn(column);
serialno.AllowDBNull = true;
csvData.Columns.Add(serialno);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
}
}
catch (Exception ex)
{
}
return csvData;
}
这给出了与先前尝试完全相同的数据:
![enter image description here][2]
但是在这种方法中,我没有收到任何错误,Grid被填充为:
任何帮助将不胜感激!感谢
编辑-------------
这是我的csv文件:
答案 0 :(得分:1)
注意:如果CSV文件编码与ANSI不同?然后你应该使用以下StreamReader
:
StreamReader MyStreamReader = new StreamReader(path, System.Text.Encoding.Unicode);
否则,我在代码中做了一些更改。见下文:
private static DataTable GetDataTabletFromCSVFile(string path)
{
DataTable csvData = new DataTable();
try
{
using (TextFieldParser csvReader = new TextFieldParser( path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn serialno = new DataColumn(column);
serialno.AllowDBNull = true;
csvData.Columns.Add(serialno);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
DataRow dr = csvData.NewRow();
//Making empty value as empty
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == null)
fieldData[i] = string.Empty;
dr[i] = fieldData[i];
}
csvData.Rows.Add(dr);
}
}
}
catch (Exception ex)
{
}
return csvData;
}