无法将System.DBNull转换为int

时间:2014-01-17 23:12:13

标签: c# excel excel-interop dbnull

我正在努力解决这个问题,我有一个excel电子表格,必须导入我的SQL Server数据库。我按如下方式迭代它:

Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.Range["A1", "D6867"]; 

int num = 4;
// String test = "";
foreach (Microsoft.Office.Interop.Excel.Range row in xlRange.Rows)
{
    if ((int)xlWorksheet.Cells[num, 1].Font.Size == 14)
    {
            ProductCategory category = new ProductCategory();
            category.Category = xlWorksheet.Cells[num, 1].Value.ToString();
            db.ProductCategories.Add(category);
    }
    num++;
    //System.Diagnostics.Debug.WriteLine(test);
} db.SaveChanges();
xlWorkbook.Close(true, Missing.Value, Missing.Value);
xlApp.Quit();

我得到的错误是

  

无法将System.DBNull转换为int

在这一行:

if ((int)xlWorksheet.Cells[num, 1].Font.Size == 14)

我不知道这个错误意味着什么,并且我正在访问的单元格中没有空值。请指教?

1 个答案:

答案 0 :(得分:3)

在至少一个单元格中,字体大小为System.DBNull。

你必须在投射之前检查尺寸类型:

if(Convert.IsDBNull(xlWorksheet.Cells[num, 1].Font.Size))
{
}
else if((int)xlWorksheet.Cells[num, 1].Font.Size == 14)
{
    // do Something....
}