关于直接从Excel中读取数据如何封装到实体类里

indysky8586 2011-11-01 05:05:32
public static ConversionItem GetConversionItem(string oldEmployeeID)
{
ConversionItem conversionItem = new ConversionItem();
string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=D:\\Emila\\HK Conversion File.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
OleDbConnection objConn = new OleDbConnection(strConn);
string sql = "select * from [sheet1$]";
OleDbCommand objCmd = new OleDbCommand(sql, objConn);
OleDbParameter para = new OleDbParameter("@oldEmployeeID", oldEmployeeID);
objCmd.Parameters.Add(para);

objConn.Open();
try
{
using (OleDbDataReader reader = objCmd.ExecuteReader())
{
if (reader.Read())
{
conversionItem.EmployeeID = Convert.ToString(reader["EmployeeID"]);
conversionItem.EmployeeStatus = Convert.ToString(reader["EmployeeStatus"]);
conversionItem.Name = Convert.ToString(reader["Name"]);
conversionItem.Unit = Convert.ToString(reader["Unit"]);
conversionItem.DepartmentName = Convert.ToString(reader["DepartmentName"]);
conversionItem.OldEmployeeID = Convert.ToString(reader["OldEmployeeID"]);
conversionItem.Folder = Convert.ToString(reader["Folder"]);

return conversionItem;
}
else
{
throw new PException("Old Employee ID {0} does not exist.", oldEmployeeID);
}
}
}
finally
{
objConn.Close();
}
}

错误出在 conversionItem.EmployeeID = Convert.ToString(reader["EmployeeID"]);

哪位大哥帮忙解决一下阿
...全文
498 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
哈哈 谢谢谢谢 搞定
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
阿 对 很有可能 谢谢你呢
lvfeng19806001 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 indysky8586 的回复:]

ds.Tables[0].Columns[0].ColumnName
"Employee ID"
可以查看到列名阿。。。。。。。。。。。。。。。
[/Quote]
呵呵,你少了空格啊,估计后面几个列名是不是也有类似问题!
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
ds.Tables[0].Columns[0].ColumnName
"Employee ID"
可以查看到列名阿。。。。。。。。。。。。。。。
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
好的 我看看 您是我的恩人呐
lvfeng19806001 2011-11-01
  • 打赏
  • 举报
回复
或者看看reader对象,看看列名到底是什么
lvfeng19806001 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 indysky8586 的回复:]

引用 3 楼 lvfeng19806001 的回复:

引用 2 楼 indysky8586 的回复:

引用 1 楼 lvfeng19806001 的回复:

报的什么错误?
1:列名EmployeeID对不?
2:reader["EmployeeID"]是否为null,如果是null,处理!
3:conversionItem.EmployeeID是否为string类型?
……
[/Quote]
从这个错误信息,很明显你的列名不对!
你可以看看你ds中的所有列名,看看有没有 EmployeeID!
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
求救阿。。。。。。
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lvfeng19806001 的回复:]

引用 2 楼 indysky8586 的回复:

引用 1 楼 lvfeng19806001 的回复:

报的什么错误?
1:列名EmployeeID对不?
2:reader["EmployeeID"]是否为null,如果是null,处理!
3:conversionItem.EmployeeID是否为string类型?


是的 全中。。。。conversionItem.E……
[/Quote]

我试了下 还是不行 还是报EmployeeID 排错提示是:确保列表中的最大索引小于列表的大小
确保索引不是负数
确保数据列名正确。。。

这些应该没错吧。。

我SQL语句后加上 OleDbDataAdapter da = new OleDbDataAdapter(sql, objConn);
objConn.Open();
DataSet ds = new DataSet();
da.Fill(ds);
objConn.Close();

及时调试窗口 可以查到 ds.Tables[0].Columns[1].ColumnName
"Name"
lvfeng19806001 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 indysky8586 的回复:]

引用 1 楼 lvfeng19806001 的回复:

报的什么错误?
1:列名EmployeeID对不?
2:reader["EmployeeID"]是否为null,如果是null,处理!
3:conversionItem.EmployeeID是否为string类型?


是的 全中。。。。conversionItem.EmployeeID是string类型。。
怎么处理阿……
[/Quote]
你是说reader["EmployeeID"]为null是吧?
两种情况:
1:是否这个地方本来就没数据,如果是这样,可以用三元符处理
Convert.ToString(reader["EmployeeID"]==null?"":reader["EmployeeID"]);
2:如果有数据,那你还得仔细看看是否列名对。
indysky8586 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lvfeng19806001 的回复:]

报的什么错误?
1:列名EmployeeID对不?
2:reader["EmployeeID"]是否为null,如果是null,处理!
3:conversionItem.EmployeeID是否为string类型?
[/Quote]

是的 全中。。。。conversionItem.EmployeeID是string类型。。
怎么处理阿。。。新手一枚 求大侠 帮助
lvfeng19806001 2011-11-01
  • 打赏
  • 举报
回复
报的什么错误?
1:列名EmployeeID对不?
2:reader["EmployeeID"]是否为null,如果是null,处理!
3:conversionItem.EmployeeID是否为string类型?

111,119

社区成员

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

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

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