日期:2014-05-19  浏览次数:20925 次

对象不能从DBNull转换为其他类型
System.InvalidCastException:对象不能从DBNull转换为其他类型
  at   System.DBNull.System.IConvertible.ToInt16(IFormatProvider   provider)
at   System.Convert..ToInt16(Object   value)
at   book.UserInterface.BorrowReturn.BorrowBookNumber(String   BookID)in   d:\book\borrowreturn.cs:line   428  

我在实现借阅图书的时候,提示这个错误。但用直接打开光盘中的例子就没问题。


private   void   btnBorrow_Click(object   sender,   System.EventArgs   e)
{
DataRow   row=this.ObjDataSetBorrowReturn.Tables[ "BorrowBook "].NewRow();
row[ "ReaderID "]=this.textReaderID.Text;
row[ "BookID "]=this.textBookID.Text;
row[ "BorrowDate "]=System.DateTime.Today;
row[ "ReturnDate "]=DateTime.Today.AddMonths(1);
this.ObjDataSetBorrowReturn.Tables[ "BorrowBook "].Rows.Add(row);
if(BorrowBook(this.textBookID.Text)&&BorrowReader(this.textReaderID.Text))
{
this.UpdateDataSet();
this.dataGrid1.Refresh();
this.textInformation.Text=this.textReaderID.Text+ "借阅图书 "+this.textBookID.Text+ "成功 ";
}

}


------解决方案--------------------
你的数据库中有空值,而你取数据的时候没有对空值(DBNull)进行判断就进行了强制转换
------解决方案--------------------
数据库里有null值数据
------解决方案--------------------
你应该在赋值的时候 判断一下

Convert.IsDBNull()
------解决方案--------------------
为什么我用光盘里自带的例子就可以实现也不报错。我自己按代码写的就出错呢?是不是有地方设置不对?

==========

不是。数据问题,当然由于代码本身不严谨,导致了问题

DBNull 表示数据库中的 NULL, 而你的数据库某行某列的值是 NULL (空值),所以无法转换失败

问题出现在 at book.UserInterface.BorrowReturn.BorrowBookNumber(String BookID)in d:\book\borrowreturn.cs:line 428

根本就表示你上面贴的代码
------解决方案--------------------
你可以用Convert.IsDBNull来判断一个值是否DBNull。注意Convert.IsDBNull(null)是false。