Как мне заполнить базу данных LiteDB, если некоторые из моих значений равны нулю - PullRequest
0 голосов
/ 13 февраля 2020

Я заполняю dataGridView из неполной таблицы Excel и генерирую LiteDB из dataGridView. До недавнего обновления у меня не было никаких проблем. Теперь я получаю ошибку «Объекты не могут быть преобразованы из DBNull в другие типы». Я могу обойти это, включив фиктивные значения в исходную таблицу. Но в конечном итоге нам нужно посмотреть, какую информацию нам не хватает. Как я могу выполнить sh это?

    public void CreateDatabase()
    {
        using (var db = new LiteDatabase(@"C:\Users\BThatcher\Documents\_Personal\Revit\MDL-Sheets\SheetDatabase04.db")) //< ----------------
        {
            var sheets = db.GetCollection<Sheet>("sheets");

            foreach (DataGridViewRow row in dataGridView2.Rows)
            {
                var sheet = new Sheet
                {
                    SheetSequence = Convert.ToInt32(row.Cells[0].Value),
                    SheetNumber = row.Cells[1].Value.ToString(),
                    SheetName = row.Cells[2].Value.ToString(),
                    AreaNumber = Convert.ToInt32(row.Cells[3].Value),
                    AreaName = row.Cells[4].Value.ToString(),
                    SheetDiscipline = row.Cells[5].Value.ToString(),
                    DisciplineSort = Convert.ToInt32(row.Cells[6].Value),
                    SheetSort = Convert.ToInt32(row.Cells[7].Value),
                    ModelName = row.Cells[8].Value.ToString(),
                    AppearsInSheetlist = row.Cells[9].Value.ToString(),
                    DesignedBy = row.Cells[10].Value.ToString(),
                    DrawnBy = row.Cells[11].Value.ToString(),
                    CheckedBy = row.Cells[12].Value.ToString(),
                    ApprovedBy = row.Cells[13].Value.ToString(),
                    SheetTotal = Convert.ToInt32(row.Cells[14].Value),
                    DesignSoftware = row.Cells[15].Value.ToString(),
                    HasPdf = row.Cells[16].Value.ToString(),
                    PdfPath = row.Cells[17].Value.ToString(),                        
                };
                sheets.Insert(sheet);                    

                this.Close();
            }
        }
    }

1 Ответ

0 голосов
/ 17 февраля 2020

Эта ошибка не из LiteDB (в LiteDB нет DBNull). Возможно, что DBNull получаются из row.Cells[n].Value при попытке преобразования.

LiteDB поддерживает значения NULL и NULL (например, int?).

...