Экспорт пустых значений БД в Excell

Я пытаюсь экспортировать данные, которые я заполнил из запроса, однако я получаю исключение с сообщением "Недопустимое значение ячейки" в последней строке.

Кажется, это происходит только тогда, когда столбец содержит нулевые значения. Как я могу изменить свой datatable, чтобы заменить нулевые значения строкой или записать нулевое значение в файл Excel, как пустое место.

Это код, который у меня есть:

DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
OracleDataAdapter adptr = new OracleDataAdapter();
try {
    con.Open();
    var oracmd = con.CreateCommand();
    oracmd.CommandText = "select Column1,Column2 from Test";           
    adptr.SelectCommand = oracmd;
    adptr.Fill(dt);
    con.Close();

    ds.Tables.Add(dt);

    SaveFileDialog saveFileDialog1 = new SaveFileDialog
    {
        Filter = "Excell files (*.xls)|*.xls";
        RestoreDirectory = true;
    };

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        ExcelLibrary.DataSetHelper.CreateWorkbook(saveFileDialog1.FileName, ds);

1 ответ

Я использую этот метод, чтобы проверить DataSet для нулевого значения и заменить их:

public static DataSet DBNull(DataSet dataSet)
    {
        try
        {
            foreach (DataTable dataTable in dataSet.Tables)
                foreach (DataRow dataRow in dataTable.Rows)
                    foreach (DataColumn dataColumn in dataTable.Columns)
                        if (dataRow.IsNull(dataColumn))
                        {
                            if (dataColumn.DataType.IsValueType) dataRow[dataColumn] = Activator.CreateInstance(dataColumn.DataType);
                            else if (dataColumn.DataType == typeof(bool)) dataRow[dataColumn] = false;
                            else if (dataColumn.DataType == typeof(Guid)) dataRow[dataColumn] = Guid.Empty;
                            else if (dataColumn.DataType == typeof(string)) dataRow[dataColumn] = string.Empty;
                            else if (dataColumn.DataType == typeof(DateTime)) dataRow[dataColumn] = DateTime.MaxValue;
                            else if (dataColumn.DataType == typeof(int) || dataColumn.DataType == typeof(byte) || dataColumn.DataType == typeof(short) || dataColumn.DataType == typeof(long) || dataColumn.DataType == typeof(float) || dataColumn.DataType == typeof(double)) dataRow[dataColumn] = 0;
                            else dataRow[dataColumn] = null;
                        }

            return dataSet;
        }
        catch (Exception ex)
        {
            return dataSet;
        }
    }
Другие вопросы по тегам