Я пытаюсь экспортировать данные в отдельные электронные таблицы на основе категорий, которые находятся в поле со списком. В combobox есть DataTable как источник данных. Этот DataTable имеет два столбца: categoryid (ValueMember) и Category (DisplayMember).Экспорт в Excel (ошибка DBNull)
Проблема заключается в том, я получаю сообщение об ошибке:
"Object cannot be cast from dbnull to other types."
Однако мой DataTable генерируется из базы данных, и оба CategoryId и категории не могут иметь значения NULL.
Вот мой код:
private void excelSpreadsheetToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
string fname = "Inventory Report.xlsx";
XLWorkbook xwb = new XLWorkbook();
foreach (DataRowView dvrow in catcombobox.Items)
{
//gives integer to function (categoryid), and gives name to spreadsheet (Category)
xwb.Worksheets.Add(exceldt(Convert.ToInt32(dvrow.Row["categoryid"])), dvrow.Row["Category"].ToString());
xwb.SaveAs(fname);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private DataTable exceldt(int i)
{
using (var sqlcmd = new SqlCommand("SELECT Item, Quantity, Date FROM inventory_table WHERE categoryid= " + i))
{
using (SqlDataAdapter sqlda = new SqlDataAdapter())
{
sqlcmd.Connection = sqlconnection;
sqlda.SelectCommand = sqlcmd;
using (DataTable dt = new DataTable())
{
sqlda.Fill(dt);
return dt;
}
}
}
}
Как я могу это исправить?
Попытка решения:
if (!(dvrow.Row["categoryid"].Equals(DBNull.Value)))
{
xwb.Worksheets.Add(exceldt(Convert.ToInt32(dvrow.Row["categoryid"])), dvrow.Row["Category"].ToString());
}
Пожалуйста, рассмотрите возможность использования SQLParameters 'используя (вар Sqlcmd = новое SqlCommand (" SELECT позиции, количество, дата FROM inventory_table WHERE CategoryID = "+ i)). Эта строка уязвима. – Max
Почему вы не изменяете свой запрос, чтобы добавить «И» в предложение where, где вы отбрасываете данные, которые не являются нулевыми. Имейте в виду, что «Null and Empty» - это не то же самое @John – MethodMan
@MethodMan , Однако столбец категории в моей базе данных не может быть «null»; его одно из ограничений. – John