C#,OleDb方式读取csv文件,读不到第一行;HDR是没用的!!!

caohui8666 2012-08-19 02:36:46
C#,OleDb方式读取csv文件,读不到第一行;
网上较多的说法是,HDR表示第一行是否为标题栏(即不是数据)。

上代码:


//打开mdb数据库
string fileName = MainManageFilePathFmtCfgTextBox.Text.ToString();
string CsvFolder = Path.GetDirectoryName(fileName);
string csvConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=" + CsvFolder + "\\"
+ ";Extended Properties='Text;HDR=No;FMT=CSVDelimited'";
OleDbConnection csvConn = new OleDbConnection(csvConnectionString);

csvConn.Open();
OleDbDataAdapter csvDa = new OleDbDataAdapter("select * from " + fileName + "", csvConn);
DataSet csvDs = new DataSet();
csvDa.Fill(csvDs, "tbl_name");

foreach (DataRow dr in csvDs.Tables["tbl_fmt_list"].Rows)
{
MessageBox.Show(dr[0].ToString()+dr[1].ToString()+dr[2].ToString(), "系统测试",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}


csv文件为:
1,test1,10
2,test2,20
3,test3,30

第一行读不出来;总是从第二行开始输出。

为什么为什么????
...全文
563 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
PisLiao 2013-07-29
  • 打赏
  • 举报
回复
可能是你的文件编码问题,也可能是你的文件编码开头含有BOM信息 导致不能正确读取到列
愚知 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
引用 6 楼 的回复:

回复5楼,这个是我贴代码的笔误。

表名可以改为一样的,可编译确认现象。

与此无关。谢谢

foreach 改为for


您好,改为for如何改写?直接改为for是编译报错的。

问题还没有解决
[/Quote]
-- for(int i =0,i<= csvDs.Tables["tbl_fmt_list"].Rows.rowsCount,i++)
caohui8666 2012-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
引用 9 楼 的回复:

引用 8 楼 的回复:
引用 6 楼 的回复:

回复5楼,这个是我贴代码的笔误。

表名可以改为一样的,可编译确认现象。

与此无关。谢谢

foreach 改为for


您好,改为for如何改写?直接改为for是编译报错的。

问题还没有解决

-- for(int i =0,i<= csvDs.Tables["tbl_fmt_l……
[/Quote]

经测试,不可以,for与foreach的效果完全一样
caohui8666 2012-08-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 6 楼 的回复:

回复5楼,这个是我贴代码的笔误。

表名可以改为一样的,可编译确认现象。

与此无关。谢谢

foreach 改为for
[/Quote]

您好,改为for如何改写?直接改为for是编译报错的。

问题还没有解决
愚知 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

回复5楼,这个是我贴代码的笔误。

表名可以改为一样的,可编译确认现象。

与此无关。谢谢
[/Quote]
foreach 改为for
jh56864591a 2012-08-21
  • 打赏
  • 举报
回复
好象EXCEL或者TXT,或者CSV,首行一直是作为字段名的吧....
折中点的么
DataTable dt = (DataTable)this.dataGridView1.DataSource;
DataRow row = dt.NewRow();
dt.Rows.InsertAt(row, 2);

dataGridView里第一行插入....里面的值么,就用datagridview1.Columns[i].HeaderText......

其他想不出来了...
caohui8666 2012-08-21
  • 打赏
  • 举报
回复
回复5楼,这个是我贴代码的笔误。

表名可以改为一样的,可编译确认现象。

与此无关。谢谢
c2606050113 2012-08-20
  • 打赏
  • 举报
回复

csvDa.Fill(csvDs, "tbl_name");

foreach (DataRow dr in csvDs.Tables["tbl_fmt_list"].Rows)
//不是同一个表
//tbl_fmt_list
//tbl_name
caohui8666 2012-08-20
  • 打赏
  • 举报
回复
在线求大神帮助
caohui8666 2012-08-20
  • 打赏
  • 举报
回复
回复2楼

源码我已经发出来了,csv文件也已经发出来了。现在不涉及checkbox,只是connectstring的参数选项,无论HDR=No还是HDR=Yes,都不起作用,第一行都无法读出来。

各开发都是有场景的,这个场景要求的csv不能有标题行
愚知 2012-08-19
  • 打赏
  • 举报
回复
1、确定你没有勾选那个第一行是标题的checkbox?
你说的这种情况百分之九十是你勾选了!
但是其实你第一行就是数据行,你如果把一行改为标题行,应该就没有问题了!
caohui8666 2012-08-19
  • 打赏
  • 举报
回复
我去,这么典型的带源码的问题没有人会么?

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧