用C#读取EXCEL时提示 对象不能从 DBNull 转换为其他类型。

ntligu 2005-10-08 05:44:57
string strConnUpload="Provider=Microsoft.Jet.OLEDB.4.0; Data Source= "+ FullPath+ "; Extended Properties=Excel 8.0 ;";
OleDbConnection connUpload = new OleDbConnection(strConnUpload);
string strSQL = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter daUpload = new OleDbDataAdapter(strSQL,connUpload);
DataSet dsUpload = new DataSet();
daUpload.Fill(dsUpload,"a");
connUpload.Close();

for (int iRow=0;iRow<dsUpload.Tables["a"].Rows.Count; iRow++)
{
int number=Convert.ToInt32(dsUpload.Tables["a"].Rows[iRow][0]);
string card=Convert.ToString(dsUpload.Tables["a"].Rows[iRow][2]);
double money=Convert.ToDouble(dsUpload.Tables["a"].Rows[iRow][3]);
sql="insert into pay VALUES("+number+",'"+card+"',"+money+","+bank_id+",'"+mon+"')";
cmd.CommandText=sql;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}

象不能从 DBNull 转换为其他类型。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 对象不能从 DBNull 转换为其他类型。

源错误: 行151错。


行 149:for (int iRow=0;iRow<dsUpload.Tables["a"].Rows.Count; iRow++)
行 150:{
行 151: int number=Convert.ToInt32(dsUpload.Tables["a"].Rows[iRow][0]);
行 152: string card=Convert.ToString(dsUpload.Tables["a"].Rows[iRow][2]);
行 153: double money=Convert.ToDouble(dsUpload.Tables["a"].Rows[iRow][3]);

...全文
396 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pscj 2006-03-30
  • 打赏
  • 举报
回复
老问题了:
加上 HDR=Yes;IMEX=1

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ FullPath+";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
AIRFLYNET 2006-03-30
  • 打赏
  • 举报
回复
if (dsUpload.Tables["a"].Rows[iRow][0]!=null)
{
.
.
.
}
songtianhua 2006-03-28
  • 打赏
  • 举报
回复
没有碰过,但听过别说过。可能是这个数据的类型跟别的不大一样,被当空处理了。

如:这一列大都是数子型的,有几个是 dd ,kk 等这样的,就会出现在空情况

在贴上看的。

哈。。
ntligu 2005-10-09
  • 打赏
  • 举报
回复
我是从EXCLE表读数据写到oracle中,程序运行了一半出错的,我看来EXCEL表中的一部份数据已经写到ORACLE表中,到了某一行提示这个错误,可是这一行的数据并不为空。
FrankWin 2005-10-09
  • 打赏
  • 举报
回复
To javaCoffee33(EastenStar) 可是EXCEL表格的那个字段中并非为空呀
也许根本dsUpload.Tables["a"]为空,或者dsUpload.Tables["a"].Rows[iRow][0]为空,或者其他地方为空,不一定就是最终目标的Excel那个表格。

Good luck...
lih163 2005-10-09
  • 打赏
  • 举报
回复
你干脆填0得了
ntligu 2005-10-09
  • 打赏
  • 举报
回复
可是EXCEL表格的那个字段中并非为空呀
javaCoffee33 2005-10-08
  • 打赏
  • 举报
回复
你已经很清楚了,判断一下,为空给0,或者其他
zhuxiaoke 2005-10-08
  • 打赏
  • 举报
回复
知道DBNull不能转化为int,string,double类型,你还用Convert.ToInt32等来转不是找死吗

110,532

社区成员

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

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

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