对象不能从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。